From 5bdfe2001fbc68b06293b79dd6426156719d33c0 Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Fri, 13 Nov 2020 04:47:55 +0900 Subject: -fix timeout test --- src/testbed/test_testbed_api_test_timeout.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/testbed/test_testbed_api_test_timeout.conf b/src/testbed/test_testbed_api_test_timeout.conf index c109fd45b..8e283664d 100644 --- a/src/testbed/test_testbed_api_test_timeout.conf +++ b/src/testbed/test_testbed_api_test_timeout.conf @@ -2,4 +2,4 @@ [testbed] OVERLAY_TOPOLOGY = CLIQUE -SETUP_TIMEOUT = 2 s +SETUP_TIMEOUT = 2 ms -- cgit v1.2.3 From ca912f85dae6b61dd80ab02d0e3f0b20a556da7c Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Thu, 12 Nov 2020 20:58:07 +0100 Subject: -remerge branch 'jacki/messenger' This reverts commit e11d1e59e4ae5f7d89c33df3ae9ca8f1ece990cf. --- README.1st | 1 + configure.ac | 2 + pkgconfig/gnunetmessenger.pc.in | 12 + po/POTFILES.in | 23 + src/Makefile.am | 3 +- src/identity/identity_api.c | 22 +- src/include/Makefile.am | 1 + src/include/gnunet_messenger_service.h | 436 ++++++++ src/include/gnunet_protocols.h | 43 +- src/messenger/.gitignore | 4 + src/messenger/Makefile.am | 131 +++ src/messenger/gnunet-messenger.c | 306 ++++++ src/messenger/gnunet-service-messenger.c | 306 ++++++ src/messenger/gnunet-service-messenger.h | 121 +++ src/messenger/gnunet-service-messenger_basement.c | 58 ++ src/messenger/gnunet-service-messenger_basement.h | 66 ++ src/messenger/gnunet-service-messenger_contact.c | 96 ++ src/messenger/gnunet-service-messenger_contact.h | 112 +++ src/messenger/gnunet-service-messenger_handle.c | 503 ++++++++++ src/messenger/gnunet-service-messenger_handle.h | 216 ++++ .../gnunet-service-messenger_list_handles.c | 95 ++ .../gnunet-service-messenger_list_handles.h | 96 ++ .../gnunet-service-messenger_list_messages.c | 76 ++ .../gnunet-service-messenger_list_messages.h | 81 ++ .../gnunet-service-messenger_message_handle.c | 130 +++ .../gnunet-service-messenger_message_handle.h | 128 +++ .../gnunet-service-messenger_message_kind.c | 192 ++++ .../gnunet-service-messenger_message_kind.h | 160 +++ .../gnunet-service-messenger_message_recv.c | 204 ++++ .../gnunet-service-messenger_message_recv.h | 159 +++ .../gnunet-service-messenger_message_send.c | 118 +++ .../gnunet-service-messenger_message_send.h | 155 +++ .../gnunet-service-messenger_message_store.c | 282 ++++++ .../gnunet-service-messenger_message_store.h | 120 +++ src/messenger/gnunet-service-messenger_room.c | 1051 ++++++++++++++++++++ src/messenger/gnunet-service-messenger_room.h | 378 +++++++ src/messenger/gnunet-service-messenger_service.c | 516 ++++++++++ src/messenger/gnunet-service-messenger_service.h | 259 +++++ src/messenger/gnunet-service-messenger_tunnel.c | 300 ++++++ src/messenger/gnunet-service-messenger_tunnel.h | 155 +++ src/messenger/gnunet-service-messenger_util.c | 64 ++ src/messenger/gnunet-service-messenger_util.h | 53 + src/messenger/messenger.conf.in | 13 + src/messenger/messenger_api.c | 568 +++++++++++ src/messenger/messenger_api_contact.c | 78 ++ src/messenger/messenger_api_contact.h | 93 ++ src/messenger/messenger_api_ego.h | 38 + src/messenger/messenger_api_handle.c | 213 ++++ src/messenger/messenger_api_handle.h | 174 ++++ src/messenger/messenger_api_list_tunnels.c | 112 +++ src/messenger/messenger_api_list_tunnels.h | 112 +++ src/messenger/messenger_api_message.c | 602 +++++++++++ src/messenger/messenger_api_message.h | 190 ++++ src/messenger/messenger_api_room.c | 189 ++++ src/messenger/messenger_api_room.h | 95 ++ src/messenger/test_messenger.c | 187 ++++ src/messenger/test_messenger_anonymous.c | 179 ++++ src/messenger/test_messenger_comm0.c | 252 +++++ 58 files changed, 10315 insertions(+), 14 deletions(-) create mode 100644 pkgconfig/gnunetmessenger.pc.in create mode 100644 src/include/gnunet_messenger_service.h create mode 100644 src/messenger/.gitignore create mode 100644 src/messenger/Makefile.am create mode 100644 src/messenger/gnunet-messenger.c create mode 100644 src/messenger/gnunet-service-messenger.c create mode 100644 src/messenger/gnunet-service-messenger.h create mode 100644 src/messenger/gnunet-service-messenger_basement.c create mode 100644 src/messenger/gnunet-service-messenger_basement.h create mode 100644 src/messenger/gnunet-service-messenger_contact.c create mode 100644 src/messenger/gnunet-service-messenger_contact.h create mode 100644 src/messenger/gnunet-service-messenger_handle.c create mode 100644 src/messenger/gnunet-service-messenger_handle.h create mode 100644 src/messenger/gnunet-service-messenger_list_handles.c create mode 100644 src/messenger/gnunet-service-messenger_list_handles.h create mode 100644 src/messenger/gnunet-service-messenger_list_messages.c create mode 100644 src/messenger/gnunet-service-messenger_list_messages.h create mode 100644 src/messenger/gnunet-service-messenger_message_handle.c create mode 100644 src/messenger/gnunet-service-messenger_message_handle.h create mode 100644 src/messenger/gnunet-service-messenger_message_kind.c create mode 100644 src/messenger/gnunet-service-messenger_message_kind.h create mode 100644 src/messenger/gnunet-service-messenger_message_recv.c create mode 100644 src/messenger/gnunet-service-messenger_message_recv.h create mode 100644 src/messenger/gnunet-service-messenger_message_send.c create mode 100644 src/messenger/gnunet-service-messenger_message_send.h create mode 100644 src/messenger/gnunet-service-messenger_message_store.c create mode 100644 src/messenger/gnunet-service-messenger_message_store.h create mode 100644 src/messenger/gnunet-service-messenger_room.c create mode 100644 src/messenger/gnunet-service-messenger_room.h create mode 100644 src/messenger/gnunet-service-messenger_service.c create mode 100644 src/messenger/gnunet-service-messenger_service.h create mode 100644 src/messenger/gnunet-service-messenger_tunnel.c create mode 100644 src/messenger/gnunet-service-messenger_tunnel.h create mode 100644 src/messenger/gnunet-service-messenger_util.c create mode 100644 src/messenger/gnunet-service-messenger_util.h create mode 100644 src/messenger/messenger.conf.in create mode 100644 src/messenger/messenger_api.c create mode 100644 src/messenger/messenger_api_contact.c create mode 100644 src/messenger/messenger_api_contact.h create mode 100644 src/messenger/messenger_api_ego.h create mode 100644 src/messenger/messenger_api_handle.c create mode 100644 src/messenger/messenger_api_handle.h create mode 100644 src/messenger/messenger_api_list_tunnels.c create mode 100644 src/messenger/messenger_api_list_tunnels.h create mode 100644 src/messenger/messenger_api_message.c create mode 100644 src/messenger/messenger_api_message.h create mode 100644 src/messenger/messenger_api_room.c create mode 100644 src/messenger/messenger_api_room.h create mode 100644 src/messenger/test_messenger.c create mode 100644 src/messenger/test_messenger_anonymous.c create mode 100644 src/messenger/test_messenger_comm0.c (limited to 'src') diff --git a/README.1st b/README.1st index 3d000a23f..c25992351 100644 --- a/README.1st +++ b/README.1st @@ -253,4 +253,5 @@ We reserve judgement (due to lack of data) on: * credential * abe * rest +* messenger diff --git a/configure.ac b/configure.ac index 581764b52..a9594a56c 100644 --- a/configure.ac +++ b/configure.ac @@ -1975,6 +1975,8 @@ src/zonemaster/zonemaster.conf src/rest/Makefile src/abe/Makefile src/reclaim/Makefile +src/messenger/Makefile +src/messenger/messenger.conf pkgconfig/Makefile pkgconfig/gnunetarm.pc pkgconfig/gnunetats.pc diff --git a/pkgconfig/gnunetmessenger.pc.in b/pkgconfig/gnunetmessenger.pc.in new file mode 100644 index 000000000..465663d0c --- /dev/null +++ b/pkgconfig/gnunetmessenger.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: GNUnet MESSENGER +Description: Instant messaging based on the CADET subsystem +URL: https://gnunet.org +Version: @VERSION@ +Requires: +Libs: -L${libdir} -lgnunetmessenger_common -lgnunetmessenger +Cflags: -I${includedir} diff --git a/po/POTFILES.in b/po/POTFILES.in index 35bd71771..00bdd7cbc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -204,6 +204,28 @@ src/json/json.c src/json/json_generator.c src/json/json_helper.c src/json/json_mhd.c +src/messenger/gnunet-messenger.c +src/messenger/gnunet-service-messenger.c +src/messenger/gnunet-service-messenger_basement.c +src/messenger/gnunet-service-messenger_contact.c +src/messenger/gnunet-service-messenger_handle.c +src/messenger/gnunet-service-messenger_list_handles.c +src/messenger/gnunet-service-messenger_list_messages.c +src/messenger/gnunet-service-messenger_message_handle.c +src/messenger/gnunet-service-messenger_message_kind.c +src/messenger/gnunet-service-messenger_message_recv.c +src/messenger/gnunet-service-messenger_message_send.c +src/messenger/gnunet-service-messenger_message_store.c +src/messenger/gnunet-service-messenger_room.c +src/messenger/gnunet-service-messenger_service.c +src/messenger/gnunet-service-messenger_tunnel.c +src/messenger/gnunet-service-messenger_util.c +src/messenger/messenger_api.c +src/messenger/messenger_api_contact.c +src/messenger/messenger_api_handle.c +src/messenger/messenger_api_list_tunnels.c +src/messenger/messenger_api_message.c +src/messenger/messenger_api_room.c src/my/my.c src/my/my_query_helper.c src/my/my_result_helper.c @@ -524,5 +546,6 @@ src/zonemaster/gnunet-service-zonemaster.c src/zonemaster/gnunet-service-zonemaster-monitor.c src/fs/fs_api.h src/include/gnunet_identity_service.h +src/include/gnunet_messenger_service.h src/testbed/testbed_api.h src/testbed/testbed_api_operations.h diff --git a/src/Makefile.am b/src/Makefile.am index f98cb96df..d8a869acb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -11,7 +11,8 @@ endif if HAVE_EXPERIMENTAL EXP_DIR = \ - rps + rps \ + messenger #abd FTBFS if HAVE_ABE EXP_DIR += \ diff --git a/src/identity/identity_api.c b/src/identity/identity_api.c index d44e8da96..64c088923 100644 --- a/src/identity/identity_api.c +++ b/src/identity/identity_api.c @@ -1138,11 +1138,11 @@ GNUNET_IDENTITY_signature_verify_ (uint32_t purpose, ssize_t -GNUNET_IDENTITY_public_key_encrypt (const void *block, - size_t size, - const struct GNUNET_IDENTITY_PublicKey *pub, - struct GNUNET_CRYPTO_EcdhePublicKey *ecc, - void *result) +GNUNET_IDENTITY_encrypt (const void *block, + size_t size, + const struct GNUNET_IDENTITY_PublicKey *pub, + struct GNUNET_CRYPTO_EcdhePublicKey *ecc, + void *result) { struct GNUNET_CRYPTO_EcdhePrivateKey pk; GNUNET_CRYPTO_ecdhe_key_create (&pk); @@ -1177,13 +1177,11 @@ GNUNET_IDENTITY_public_key_encrypt (const void *block, ssize_t -GNUNET_IDENTITY_private_key_decrypt (const void *block, - size_t size, - const struct - GNUNET_IDENTITY_PrivateKey *priv, - const struct - GNUNET_CRYPTO_EcdhePublicKey *ecc, - void *result) +GNUNET_IDENTITY_decrypt (const void *block, + size_t size, + const struct GNUNET_IDENTITY_PrivateKey *priv, + const struct GNUNET_CRYPTO_EcdhePublicKey *ecc, + void *result) { struct GNUNET_HashCode hash; switch (ntohl (priv->type)) diff --git a/src/include/Makefile.am b/src/include/Makefile.am index 202abb7ac..fc3d745a6 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -62,6 +62,7 @@ gnunetinclude_HEADERS = \ gnunet_json_lib.h \ gnunet_load_lib.h \ gnunet_cadet_service.h \ + gnunet_messenger_service.h \ gnunet_mhd_compat.h \ gnunet_microphone_lib.h \ gnunet_mst_lib.h \ diff --git a/src/include/gnunet_messenger_service.h b/src/include/gnunet_messenger_service.h new file mode 100644 index 000000000..8f5315c30 --- /dev/null +++ b/src/include/gnunet_messenger_service.h @@ -0,0 +1,436 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * + * @file + * MESSENGER service; manages decentralized chat groups + * + * @defgroup messenger MESSENGER service + * Instant messaging based on the CADET subsystem + * + * @{ + */ + +#ifndef GNUNET_MESSENGER_SERVICE_H +#define GNUNET_MESSENGER_SERVICE_H + +#ifdef __cplusplus +extern "C" { +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + +#include "platform.h" +#include "gnunet_configuration_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" +#include "gnunet_mq_lib.h" +#include "gnunet_protocols.h" +#include "gnunet_scheduler_lib.h" +#include "gnunet_time_lib.h" + +#define GNUNET_MESSENGER_SERVICE_NAME "messenger" + +/** + * Opaque handle to the messenger + */ +struct GNUNET_MESSENGER_Handle; + +/** + * Opaque handle to a room + */ +struct GNUNET_MESSENGER_Room; + +/** + * Opaque handle to a contact + */ +struct GNUNET_MESSENGER_Contact; + +/** + * Enum for the different supported kinds of messages + */ +enum GNUNET_MESSENGER_MessageKind +{ + GNUNET_MESSENGER_KIND_INFO = 1, + + GNUNET_MESSENGER_KIND_JOIN = 2, + GNUNET_MESSENGER_KIND_LEAVE = 3, + + GNUNET_MESSENGER_KIND_NAME = 4, + GNUNET_MESSENGER_KIND_KEY = 5, + GNUNET_MESSENGER_KIND_PEER = 6, + GNUNET_MESSENGER_KIND_ID = 7, + + GNUNET_MESSENGER_KIND_MISS = 8, + GNUNET_MESSENGER_KIND_MERGE = 9, + GNUNET_MESSENGER_KIND_REQUEST = 10, + + GNUNET_MESSENGER_KIND_INVITE = 11, + GNUNET_MESSENGER_KIND_TEXT = 12, + GNUNET_MESSENGER_KIND_FILE = 13, + + GNUNET_MESSENGER_KIND_PRIVATE = 14, + + GNUNET_MESSENGER_KIND_UNKNOWN = 0 +}__attribute__((__packed__)); + +/** + * Get the name of a message kind. + * + * @param kind Kind of a message + * @return Name of that kind + */ +const char* +GNUNET_MESSENGER_name_of_kind (enum GNUNET_MESSENGER_MessageKind kind); + +struct GNUNET_MESSENGER_MessageHeader +{ + struct GNUNET_IDENTITY_Signature signature; + + struct GNUNET_TIME_AbsoluteNBO timestamp; + + struct GNUNET_ShortHashCode sender_id; + struct GNUNET_HashCode previous; + + enum GNUNET_MESSENGER_MessageKind kind; +}; + +struct GNUNET_MESSENGER_MessageInfo +{ + struct GNUNET_IDENTITY_PublicKey host_key; + struct GNUNET_ShortHashCode unique_id; +}; + +struct GNUNET_MESSENGER_MessageJoin +{ + struct GNUNET_IDENTITY_PublicKey key; +}; + +struct GNUNET_MESSENGER_MessageLeave +{ +}; + +struct GNUNET_MESSENGER_MessageName +{ + char *name; +}; + +struct GNUNET_MESSENGER_MessageKey +{ + struct GNUNET_IDENTITY_PublicKey key; +}; + +struct GNUNET_MESSENGER_MessagePeer +{ + struct GNUNET_PeerIdentity peer; +}; + +struct GNUNET_MESSENGER_MessageId +{ + struct GNUNET_ShortHashCode id; +}; + +struct GNUNET_MESSENGER_MessageMiss +{ + struct GNUNET_PeerIdentity peer; +}; + +struct GNUNET_MESSENGER_MessageMerge +{ + struct GNUNET_HashCode previous; +}; + +struct GNUNET_MESSENGER_MessageRequest +{ + struct GNUNET_HashCode hash; +}; + +struct GNUNET_MESSENGER_MessageInvite +{ + struct GNUNET_PeerIdentity door; + struct GNUNET_HashCode key; +}; + +struct GNUNET_MESSENGER_MessageText +{ + char *text; +}; + +struct GNUNET_MESSENGER_MessageFile +{ + struct GNUNET_CRYPTO_SymmetricSessionKey key; + struct GNUNET_HashCode hash; + char name[NAME_MAX]; + char *uri; +}; + +struct GNUNET_MESSENGER_MessagePrivate +{ + struct GNUNET_CRYPTO_EcdhePublicKey key; + + uint16_t length; + char *data; +}; + +struct GNUNET_MESSENGER_MessageBody +{ + union + { + struct GNUNET_MESSENGER_MessageInfo info; + + struct GNUNET_MESSENGER_MessageJoin join; + struct GNUNET_MESSENGER_MessageLeave leave; + + struct GNUNET_MESSENGER_MessageName name; + struct GNUNET_MESSENGER_MessageKey key; + struct GNUNET_MESSENGER_MessagePeer peer; + struct GNUNET_MESSENGER_MessageId id; + + struct GNUNET_MESSENGER_MessageMiss miss; + struct GNUNET_MESSENGER_MessageMerge merge; + struct GNUNET_MESSENGER_MessageRequest request; + + struct GNUNET_MESSENGER_MessageInvite invite; + struct GNUNET_MESSENGER_MessageText text; + struct GNUNET_MESSENGER_MessageFile file; + + struct GNUNET_MESSENGER_MessagePrivate private; + }; +}; + +/** + * Struct to a message + */ +struct GNUNET_MESSENGER_Message +{ + struct GNUNET_MESSENGER_MessageHeader header; + struct GNUNET_MESSENGER_MessageBody body; +}; + +/** + * Method called whenever the EGO of a handle changes or if the first connection fails + * to load a valid EGO and the anonymous keypair will be used instead. + * + * @param cls Closure from GNUNET_MESSENGER_connect + * @param handle Messenger handle + */ +typedef void +(*GNUNET_MESSENGER_IdentityCallback) (void *cls, struct GNUNET_MESSENGER_Handle *handle); + +/** + * Method called whenever a message is sent or received from a room. + * + * @param cls Closure from GNUNET_MESSENGER_connect + * @param room Room handle + * @param message Newly received or sent message + * @param hash Hash identifying the message + */ +typedef void +(*GNUNET_MESSENGER_MessageCallback) (void *cls, const struct GNUNET_MESSENGER_Room *room, + const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Set up a handle for the messenger related functions and connects to all necessary services. It will look up the ego + * key identified by its name and use it for signing all messages from the handle. + * + * @param cfg Configuration to use + * @param name Name to look up an ego or NULL to stay anonymous + * @param identity_callback Function called when the EGO of the handle changes + * @param identity_cls Closure for the identity_callback handler + * @param msg_callback Function called when a new message is sent or received + * @param msg_cls Closure for the msg_callback handler + * @return Messenger handle to use, NULL on error + */ +struct GNUNET_MESSENGER_Handle* +GNUNET_MESSENGER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *name, + GNUNET_MESSENGER_IdentityCallback identity_callback, void *identity_cls, + GNUNET_MESSENGER_MessageCallback msg_callback, void *msg_cls); + +/** + * Update a handle of the messenger to use a different ego key and replace the old one with a newly generated one. All + * participated rooms get informed about the key renewal. The handle requires a set name for this function to work and + * it needs to be unused by other egos. + * + * Keep in mind that this will fully delete the old ego key (if any is used) even if any other service wants to use it + * as default. + * + * @param handle Messenger handle to use + * @return GNUNET_OK on success, GNUNET_SYSERR on failure + */ +int +GNUNET_MESSENGER_update (struct GNUNET_MESSENGER_Handle *handle); + +/** + * Disconnect all of the messengers used services and clears up its used memory. + * + * @param handle Messenger handle to use + */ +void +GNUNET_MESSENGER_disconnect (struct GNUNET_MESSENGER_Handle *handle); + +/** + * Get the name (if specified, otherwise NULL) used by the messenger. + * + * @param handle Messenger handle to use + * @return Name used by the messenger or NULL + */ +const char* +GNUNET_MESSENGER_get_name (const struct GNUNET_MESSENGER_Handle *handle); + +/** + * Set the name for the messenger. This will rename the currently used ego and move all stored files related to the current + * name to its new directory. If anything fails during this process the function returns GNUNET_NO and the name for + * the messenger won't change as specified. + * + * @param handle Messenger handle to use + * @param name Name for the messenger to change to + * @return GNUNET_YES on success, GNUNET_NO on failure and GNUNET_SYSERR if handle is NULL + */ +int +GNUNET_MESSENGER_set_name (struct GNUNET_MESSENGER_Handle *handle, const char *name); + +/** + * Get the public key used by the messenger. + * + * @param handle Messenger handle to use + * @return Used ego's public key + */ +const struct GNUNET_IDENTITY_PublicKey* +GNUNET_MESSENGER_get_key (const struct GNUNET_MESSENGER_Handle *handle); + +/** + * Open a room to send and receive messages. The room will use the specified key as port for the underlying cadet + * service. Opening a room results in opening the port for incoming connections as possible door. + * + * Notice that there can only be one room related to a specific key. So trying to open two rooms with the same + * key will result in opening the room once but returning the handle both times because the room stays open. + * + * You can also open a room after entering it through a door using GNUNET_MESSENGER_entry_room(...). This + * will notify all entered doors to list you as new door. + * + * ( All doors form a ring structured network to shorten the latency sending and receiving messages. ) + * + * @param handle Messenger handle to use + * @param key Hash identifying the port + * @return Room handle, NULL on error + */ +struct GNUNET_MESSENGER_Room* +GNUNET_MESSENGER_open_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key); + +/** + * Enter a room to send and receive messages through a door opened using GNUNET_MESSENGER_open_room(...). + * + * Notice that there can only be one room related to a specific key. So trying to enter two rooms with the same + * key will result in entering the room once but returning the handle both times because the room stays entered. + * You can however enter a room through multiple doors in parallel which results in connecting both ends. But + * entering the room through the same door won't have any effect after the first time. + * + * You can also enter a room through a door after opening it using GNUNET_MESSENGER_open_room(...). But the + * door may not be your own peer identity. + * + * ( All doors form a ring structured network to shorten the latency sending and receiving messages. ) + * + * @param handle Messenger handle to use + * @param door Peer identity of an open door + * @param key Hash identifying the port + * @return Room handle, NULL on error + */ +struct GNUNET_MESSENGER_Room* +GNUNET_MESSENGER_entry_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_PeerIdentity *door, + const struct GNUNET_HashCode *key); + +/** + * Close a room which was entered, opened or both in various order and variety. Closing a room will destroy all connections + * from your peer to another and the other way around. + * + * ( After a member closes a door, all members entered through that specific door have to use another one + * or open the room on their own. ) + * + * @param room Room handle + */ +void +GNUNET_MESSENGER_close_room (struct GNUNET_MESSENGER_Room *room); + +/** + * Get the contact of a member in a room identified by their id. + * + * Notice that contacts are independent of rooms but will be removed if all rooms containing these contacts get closed. + * + * @param room Room handle + * @param id Hash identifying a member + * @return Contact handle, NULL if id is not in use + */ +struct GNUNET_MESSENGER_Contact* +GNUNET_MESSENGER_get_member (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_ShortHashCode *id); + +/** + * Get the name used by the contact. + * + * @param contact Contact handle + * @return Name of contact or NULL + */ +const char* +GNUNET_MESSENGER_contact_get_name (const struct GNUNET_MESSENGER_Contact *contact); + +/** + * Get the public key used by the contact. + * + * @param contact Contact handle + * @return Public key of the ego used by contact + */ +const struct GNUNET_IDENTITY_PublicKey* +GNUNET_MESSENGER_contact_get_key (const struct GNUNET_MESSENGER_Contact *contact); + +/** + * Send a message into a room. If you opened the room all entered members will receive the + * message. If you entered the room through a door all so entered doors will receive the + * message as well. All members receiving the message will also propagate this message recursively + * as long as the message is unknown to them. + * + * Notice that all messages sent and received are also stored and can be propagated to new members entering the room. + * + * @param room Room handle + * @param message New message to send + */ +void +GNUNET_MESSENGER_send_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message); + +/** + * Get the message in a room identified by its hash. + * + * @param room Room handle + * @param hash Hash identifying a message + * @return Message struct or NULL if no message with that hash is known + */ +const struct GNUNET_MESSENGER_Message* +GNUNET_MESSENGER_get_message (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_HashCode *hash); + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +#endif //GNUNET_MESSENGER_SERVICE_H + +/** @} *//* end of group */ diff --git a/src/include/gnunet_protocols.h b/src/include/gnunet_protocols.h index e9b81a654..9aa029e9d 100644 --- a/src/include/gnunet_protocols.h +++ b/src/include/gnunet_protocols.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - Copyright (C) 2001--2018 GNUnet e.V. + Copyright (C) 2001--2020 GNUnet e.V. GNUnet is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published @@ -20,6 +20,7 @@ /** * @author Christian Grothoff + * @author Tobias Frisch * * @file * Constants for network protocols @@ -3508,6 +3509,46 @@ extern "C" { #define GNUNET_MESSAGE_TYPE_RECLAIM_REFERENCE_RESULT 1501 +/*********************************************************************************/ +/********************************** MESSENGER **********************************/ +/*********************************************************************************/ +/* MESSENGER: message types 1600-1629 + * 1600-1609 Connection-level Messages + * 1610-1619 Room-level Messages + */ + +/********************************* Connection **********************************/ + +#define GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_CREATE 1600 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_UPDATE 1601 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_DESTROY 1602 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_GET_NAME 1603 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_SET_NAME 1604 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_GET_KEY 1605 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_MEMBER_ID 1606 + +/************************************ Room *************************************/ + +#define GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_OPEN 1610 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_ENTRY 1611 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_CLOSE 1612 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_SEND_MESSAGE 1614 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_RECV_MESSAGE 1615 + +#define GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_GET_MESSAGE 1616 + +/*********************************************************************************/ + /** * Type used to match 'all' message types. */ diff --git a/src/messenger/.gitignore b/src/messenger/.gitignore new file mode 100644 index 000000000..9de3fb304 --- /dev/null +++ b/src/messenger/.gitignore @@ -0,0 +1,4 @@ +gnunet-service-messenger +gnunet-messenger +test_messenger_api +test_messenger_anonymous diff --git a/src/messenger/Makefile.am b/src/messenger/Makefile.am new file mode 100644 index 000000000..ebe08290e --- /dev/null +++ b/src/messenger/Makefile.am @@ -0,0 +1,131 @@ +# This Makefile.am is in the public domain +AM_CPPFLAGS = -I$(top_srcdir)/src/include + +if USE_COVERAGE + AM_CFLAGS = --coverage -O0 + XLIB = -lgcov +endif + +pkgcfgdir= $(pkgdatadir)/config.d/ + +libexecdir= $(pkglibdir)/libexec/ + +pkgcfg_DATA = \ + messenger.conf + +plugindir = $(libdir)/gnunet + +AM_CLFAGS = -g + +libexec_PROGRAMS = \ + gnunet-service-messenger \ + $(EXP_LIBEXEC) + +bin_PROGRAMS = \ + gnunet-messenger + +lib_LTLIBRARIES = \ + libgnunetmessenger_common.la \ + libgnunetmessenger.la \ + $(EXP_LIB) + +libgnunetmessenger_common_la_SOURCES = \ + messenger_api_ego.h \ + messenger_api_message.c messenger_api_message.h \ + messenger_api_list_tunnels.c messenger_api_list_tunnels.h +libgnunetmessenger_common_la_LIBADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/identity/libgnunetidentity.la \ + $(XLIB) \ + $(LTLIBINTL) +libgnunetmessenger_common_la_LDFLAGS = \ + $(GN_LIB_LDFLAGS) \ + -version-info 0:0:0 + +libgnunetmessenger_la_SOURCES = \ + messenger_api.c \ + messenger_api_contact.c messenger_api_contact.h \ + messenger_api_handle.c messenger_api_handle.h \ + messenger_api_room.c messenger_api_room.h +libgnunetmessenger_la_LIBADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/identity/libgnunetidentity.la \ + libgnunetmessenger_common.la \ + $(XLIB) \ + $(LTLIBINTL) +libgnunetmessenger_la_LDFLAGS = \ + $(GN_LIB_LDFLAGS) \ + -version-info 0:0:0 + +gnunet_messenger_SOURCES = \ + gnunet-messenger.c +gnunet_messenger_LDADD = \ + libgnunetmessenger_common.la \ + libgnunetmessenger.la \ + $(top_builddir)/src/util/libgnunetutil.la +gnunet_messenger_LDFLAGS = \ + $(GN_LIBINTL) + +gnunet_service_messenger_SOURCES = \ + gnunet-service-messenger.c gnunet-service-messenger.h \ + gnunet-service-messenger_service.c gnunet-service-messenger_service.h \ + gnunet-service-messenger_list_handles.c gnunet-service-messenger_list_handles.h \ + gnunet-service-messenger_list_messages.c gnunet-service-messenger_list_messages.h \ + gnunet-service-messenger_message_handle.c gnunet-service-messenger_message_handle.h \ + gnunet-service-messenger_message_kind.c gnunet-service-messenger_message_kind.h \ + gnunet-service-messenger_message_recv.c gnunet-service-messenger_message_recv.h \ + gnunet-service-messenger_message_send.c gnunet-service-messenger_message_send.h \ + gnunet-service-messenger_message_store.c gnunet-service-messenger_message_store.h \ + gnunet-service-messenger_basement.c gnunet-service-messenger_basement.h \ + gnunet-service-messenger_contact.c gnunet-service-messenger_contact.h \ + gnunet-service-messenger_handle.c gnunet-service-messenger_handle.h \ + gnunet-service-messenger_room.c gnunet-service-messenger_room.h \ + gnunet-service-messenger_tunnel.c gnunet-service-messenger_tunnel.h \ + gnunet-service-messenger_util.c gnunet-service-messenger_util.h +gnunet_service_messenger_LDADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/cadet/libgnunetcadet.la \ + $(top_builddir)/src/identity/libgnunetidentity.la \ + libgnunetmessenger_common.la \ + libgnunetmessenger.la \ + $(GN_LIBINTL) + +check_PROGRAMS = \ + test_messenger_api \ + test_messenger_anonymous \ + test_messenger_comm0 + +if ENABLE_TEST_RUN +AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; +TESTS = \ + $(check_PROGRAMS) +endif + +test_messenger_api_SOURCES = \ + test_messenger.c +test_messenger_api_LDADD = \ + libgnunetmessenger_common.la \ + libgnunetmessenger.la \ + $(top_builddir)/src/testing/libgnunettesting.la \ + $(top_builddir)/src/util/libgnunetutil.la + +test_messenger_anonymous_SOURCES = \ + test_messenger_anonymous.c +test_messenger_anonymous_LDADD = \ + libgnunetmessenger_common.la \ + libgnunetmessenger.la \ + $(top_builddir)/src/testing/libgnunettesting.la \ + $(top_builddir)/src/util/libgnunetutil.la + +test_messenger_comm0_SOURCES = \ + test_messenger_comm0.c +test_messenger_comm0_LDADD = \ + libgnunetmessenger_common.la \ + libgnunetmessenger.la \ + $(top_builddir)/src/testbed/libgnunettestbed.la \ + $(top_builddir)/src/testbed-logger/libgnunettestbedlogger.la \ + $(top_builddir)/src/testing/libgnunettesting.la \ + $(top_builddir)/src/util/libgnunetutil.la + +EXTRA_DIST = \ + test_messenger_api.conf diff --git a/src/messenger/gnunet-messenger.c b/src/messenger/gnunet-messenger.c new file mode 100644 index 000000000..579e5c3ad --- /dev/null +++ b/src/messenger/gnunet-messenger.c @@ -0,0 +1,306 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-messenger.c + * @brief Print information about messenger groups. + */ + +#include + +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_messenger_service.h" + +struct GNUNET_MESSENGER_Handle *messenger; + +/** + * Function called whenever a message is received or sent. + * + * @param cls Closure + * @param room Room + * @param message Message + * @param hash Hash of message + */ +void +on_message (void *cls, const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_Contact *sender = GNUNET_MESSENGER_get_member (room, &(message->header.sender_id)); + + const char *sender_name = GNUNET_MESSENGER_contact_get_name (sender); + + if (!sender_name) + sender_name = "anonymous"; + + switch (message->header.kind) + { + case GNUNET_MESSENGER_KIND_JOIN: + { + printf ("* '%s' joined the room! [ %u %u %u %u ]\n", sender_name, message->body.join.key.ecdsa_key.q_y[0], + message->body.join.key.ecdsa_key.q_y[1], message->body.join.key.ecdsa_key.q_y[2], + message->body.join.key.ecdsa_key.q_y[3]); + break; + } + case GNUNET_MESSENGER_KIND_LEAVE: + { + printf ("* '%s' leaves the room!\n", sender_name); + break; + } + case GNUNET_MESSENGER_KIND_PEER: + { + printf ("* '%s' opened the room on: %s\n", sender_name, GNUNET_i2s_full (&(message->body.peer.peer))); + break; + } + case GNUNET_MESSENGER_KIND_TEXT: + { + printf ("* '%s' says: \"%s\"\n", sender_name, message->body.text.text); + break; + } + default: + { + break; + } + } +} + +struct GNUNET_SCHEDULER_Task *read_task; + +/** + * Task to shut down this application. + * + * @param cls Closure + */ +static void +shutdown_hook (void *cls) +{ + struct GNUNET_MESSENGER_Room *room = cls; + + if (read_task) + GNUNET_SCHEDULER_cancel (read_task); + + if (room) + GNUNET_MESSENGER_close_room (room); + + if (messenger) + GNUNET_MESSENGER_disconnect (messenger); +} + +static void +listen_stdio (void *cls); + +#define MAX_BUFFER_SIZE 60000 + +/** + * Task run in stdio mode, after some data is available at stdin. + * + * @param cls Closure + */ +static void +read_stdio (void *cls) +{ + read_task = NULL; + + char buffer[MAX_BUFFER_SIZE]; + ssize_t length; + + length = read (0, buffer, MAX_BUFFER_SIZE); + + if ((length <= 0) || (length >= MAX_BUFFER_SIZE)) + { + GNUNET_SCHEDULER_shutdown (); + return; + } + + if (buffer[length - 1] == '\n') + buffer[length - 1] = '\0'; + else + buffer[length] = '\0'; + + struct GNUNET_MESSENGER_Room *room = cls; + + struct GNUNET_MESSENGER_Message message; + message.header.kind = GNUNET_MESSENGER_KIND_TEXT; + message.body.text.text = buffer; + + GNUNET_MESSENGER_send_message (room, &message); + + read_task = GNUNET_SCHEDULER_add_now (listen_stdio, cls); +} + +/** + * Wait for input on STDIO and send it out over the #ch. + * + * @param cls Closure + */ +static void +listen_stdio (void *cls) +{ + read_task = NULL; + + struct GNUNET_NETWORK_FDSet *rs = GNUNET_NETWORK_fdset_create (); + + GNUNET_NETWORK_fdset_set_native (rs, 0); + + read_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, + GNUNET_TIME_UNIT_FOREVER_REL, + rs, + NULL, + &read_stdio, cls); + + GNUNET_NETWORK_fdset_destroy (rs); +} + +/** + * Initial task to startup application. + * + * @param cls Closure + */ +static void +idle (void *cls) +{ + struct GNUNET_MESSENGER_Room *room = cls; + + printf ("* You joined the room.\n"); + + read_task = GNUNET_SCHEDULER_add_now (listen_stdio, room); +} + +char *door_id; +char *ego_name; +char *room_key; + +struct GNUNET_SCHEDULER_Task *shutdown_task; + +/** + * Function called when an identity is retrieved. + * + * @param cls Closure + * @param handle Handle of messenger service + */ +static void +on_identity (void *cls, struct GNUNET_MESSENGER_Handle *handle) +{ + struct GNUNET_HashCode key; + memset (&key, 0, sizeof(key)); + + if (room_key) + GNUNET_CRYPTO_hash (room_key, strlen (room_key), &key); + + struct GNUNET_PeerIdentity *door = NULL; + + if (door_id) + { + door = GNUNET_new(struct GNUNET_PeerIdentity); + + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_public_key_from_string (door_id, strlen (door_id), &(door->public_key))) + { + GNUNET_free(door); + door = NULL; + } + } + + const char *name = GNUNET_MESSENGER_get_name (handle); + + if (!name) + name = "anonymous"; + + printf ("* Welcome to the messenger, '%s'!\n", name); + + struct GNUNET_MESSENGER_Room *room; + + if (door) + { + printf ("* You try to entry a room...\n"); + + room = GNUNET_MESSENGER_entry_room (messenger, door, &key); + } + else + { + printf ("* You try to open a room...\n"); + + room = GNUNET_MESSENGER_open_room (messenger, &key); + } + + GNUNET_SCHEDULER_cancel (shutdown_task); + + shutdown_task = GNUNET_SCHEDULER_add_shutdown (shutdown_hook, room); + + if (!room) + GNUNET_SCHEDULER_shutdown (); + else + GNUNET_SCHEDULER_add_delayed_with_priority (GNUNET_TIME_relative_get_zero_ (), GNUNET_SCHEDULER_PRIORITY_IDLE, idle, + room); +} + +/** + * Main function that will be run by the scheduler. + * + * @param cls closure + * @param args remaining command-line arguments + * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param cfg configuration + */ +static void +run (void *cls, char *const*args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + messenger = GNUNET_MESSENGER_connect (cfg, ego_name, &on_identity, NULL, &on_message, NULL); + + shutdown_task = GNUNET_SCHEDULER_add_shutdown (shutdown_hook, NULL); +} + +/** + * The main function to obtain messenger information. + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, char **argv) +{ + const char *description = "Open and connect to rooms using the MESSENGER to chat."; + + struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_option_string ('d', + "door", + "PEERIDENTITY", + "peer identity to entry into the room", + &door_id), + GNUNET_GETOPT_option_string ('e', + "ego", + "IDENTITY", + "identity to use for messaging", + &ego_name), + GNUNET_GETOPT_option_string ('r', + "room", + "ROOMKEY", + "key of the room to connect to", + &room_key), + GNUNET_GETOPT_OPTION_END }; + + return (GNUNET_OK == GNUNET_PROGRAM_run (argc, + argv, + "gnunet-messenger\0", + gettext_noop(description), + options, + &run, + NULL) ? EXIT_SUCCESS : EXIT_FAILURE); +} diff --git a/src/messenger/gnunet-service-messenger.c b/src/messenger/gnunet-service-messenger.c new file mode 100644 index 000000000..2c92305c4 --- /dev/null +++ b/src/messenger/gnunet-service-messenger.c @@ -0,0 +1,306 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger.h" + +#include "gnunet-service-messenger_service.h" +#include "messenger_api_message.h" + +struct GNUNET_MESSENGER_Client +{ + struct GNUNET_SERVICE_Client *client; + struct GNUNET_MESSENGER_SrvHandle *handle; +}; + +struct GNUNET_MESSENGER_Service *messenger; + +static int +check_create (void *cls, const struct GNUNET_MESSENGER_CreateMessage *msg) +{ + GNUNET_MQ_check_zero_termination(msg); + return GNUNET_OK; +} + +static void +handle_create (void *cls, const struct GNUNET_MESSENGER_CreateMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + const char *name = ((const char*) msg) + sizeof(*msg); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Handle created with name: %s\n", name); + + setup_handle_name (msg_client->handle, strlen (name) > 0? name : NULL); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static void +handle_update (void *cls, const struct GNUNET_MESSENGER_UpdateMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + if (GNUNET_OK != update_handle (msg_client->handle)) + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Name is required to update key!\n"); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static void +handle_destroy (void *cls, const struct GNUNET_MESSENGER_DestroyMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + GNUNET_SERVICE_client_drop (msg_client->client); +} + +static int +check_set_name (void *cls, const struct GNUNET_MESSENGER_NameMessage *msg) +{ + GNUNET_MQ_check_zero_termination(msg); + return GNUNET_OK; +} + +static void +handle_set_name (void *cls, const struct GNUNET_MESSENGER_NameMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + const char *name = ((const char*) msg) + sizeof(*msg); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Handles name is now: %s\n", name); + + if (GNUNET_YES != set_handle_name (msg_client->handle, name)) + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "No valid name: %s\n", name); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static void +handle_room_open (void *cls, const struct GNUNET_MESSENGER_RoomMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Opening room: %s\n", + GNUNET_h2s (&(msg->key))); + + if (GNUNET_YES == open_handle_room (msg_client->handle, &(msg->key))) + { + const struct GNUNET_ShortHashCode* member_id = get_handle_member_id(msg_client->handle, &(msg->key)); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Opening room with member id: %s\n", + GNUNET_sh2s (member_id)); + + struct GNUNET_MESSENGER_RoomMessage *response; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(response, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_OPEN); + GNUNET_memcpy(&(response->key), &(msg->key), sizeof(msg->key)); + GNUNET_MQ_send (msg_client->handle->mq, env); + } + else + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Opening room failed: %s\n", + GNUNET_h2s (&(msg->key))); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static void +handle_room_entry (void *cls, const struct GNUNET_MESSENGER_RoomMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Entering room: %s, %s\n", + GNUNET_h2s (&(msg->key)), GNUNET_i2s (&(msg->door))); + + if (GNUNET_YES == entry_handle_room (msg_client->handle, &(msg->door), &(msg->key))) + { + const struct GNUNET_ShortHashCode* member_id = get_handle_member_id(msg_client->handle, &(msg->key)); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Entering room with member id: %s\n", + GNUNET_sh2s (member_id)); + + struct GNUNET_MESSENGER_RoomMessage *response; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(response, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_ENTRY); + GNUNET_memcpy(&(response->door), &(msg->door), sizeof(msg->door)); + GNUNET_memcpy(&(response->key), &(msg->key), sizeof(msg->key)); + GNUNET_MQ_send (msg_client->handle->mq, env); + } + else + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Entrance into room failed: %s, %s\n", + GNUNET_h2s (&(msg->key)), GNUNET_i2s (&(msg->door))); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static void +handle_room_close (void *cls, const struct GNUNET_MESSENGER_RoomMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Closing room: %s\n", GNUNET_h2s (&(msg->key))); + + if (GNUNET_YES == close_handle_room (msg_client->handle, &(msg->key))) + { + const struct GNUNET_ShortHashCode* member_id = get_handle_member_id(msg_client->handle, &(msg->key)); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Closing room with member id: %s\n", + GNUNET_sh2s (member_id)); + + struct GNUNET_MESSENGER_RoomMessage *response; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(response, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_CLOSE); + GNUNET_memcpy(&(response->key), &(msg->key), sizeof(msg->key)); + GNUNET_MQ_send (msg_client->handle->mq, env); + } + else + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Closing room failed: %s\n", GNUNET_h2s (&(msg->key))); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static int +check_send_message (void *cls, const struct GNUNET_MESSENGER_SendMessage *msg) +{ + const uint16_t full_length = ntohs (msg->header.size) - sizeof(msg->header); + + if (full_length < sizeof(msg->key)) + return GNUNET_NO; + + const uint16_t length = full_length - sizeof(msg->key); + const char *buffer = ((const char*) msg) + sizeof(*msg); + + struct GNUNET_MESSENGER_Message message; + + if (GNUNET_YES != decode_message (&message, length, buffer)) + return GNUNET_NO; + + return GNUNET_OK; +} + +static void +handle_send_message (void *cls, const struct GNUNET_MESSENGER_SendMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + const struct GNUNET_HashCode *key = &(msg->key); + const char *buffer = ((const char*) msg) + sizeof(*msg); + + const uint16_t length = ntohs (msg->header.size) - sizeof(*msg); + + struct GNUNET_MESSENGER_Message message; + decode_message (&message, length, buffer); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Sending message: %s to %s\n", + GNUNET_MESSENGER_name_of_kind (message.header.kind), + GNUNET_h2s (key)); + + if (GNUNET_YES != send_handle_message (msg_client->handle, key, &message)) + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Sending message failed: %s to %s\n", + GNUNET_MESSENGER_name_of_kind (message.header.kind), + GNUNET_h2s (key)); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static void +handle_get_message (void *cls, const struct GNUNET_MESSENGER_RecvMessage *msg) +{ + struct GNUNET_MESSENGER_Client *msg_client = cls; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Requesting message from room: %s\n", + GNUNET_h2s (&(msg->key))); + + struct GNUNET_MESSENGER_SrvRoom *room = get_service_room (messenger, &(msg->key)); + + if (room) + get_room_message (room, msg_client->handle, &(msg->hash), GNUNET_YES); + else + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Room not found: %s\n", + GNUNET_h2s (&(msg->key))); + + GNUNET_SERVICE_client_continue (msg_client->client); +} + +static void* +callback_client_connect (void *cls, struct GNUNET_SERVICE_Client *client, struct GNUNET_MQ_Handle *mq) +{ + struct GNUNET_MESSENGER_Client *msg_client = GNUNET_new(struct GNUNET_MESSENGER_Client); + + msg_client->client = client; + msg_client->handle = add_service_handle (messenger, mq); + + return msg_client; +} + +static void +callback_client_disconnect (void *cls, struct GNUNET_SERVICE_Client *client, void *internal_cls) +{ + struct GNUNET_MESSENGER_Client *msg_client = internal_cls; + + remove_service_handle (messenger, msg_client->handle); + + GNUNET_free(msg_client); +} + +/** + * Setup MESSENGER internals. + * + * @param cls closure + * @param config configuration to use + * @param service the initialized service + */ +static void +run (void *cls, const struct GNUNET_CONFIGURATION_Handle *config, struct GNUNET_SERVICE_Handle *service) +{ + messenger = create_service (config, service); + + if ((!messenger) || (!messenger->cadet) || (!messenger->identity)) + GNUNET_SCHEDULER_shutdown (); +} + +/** + * Define "main" method using service macro. + */ +GNUNET_SERVICE_MAIN( + GNUNET_MESSENGER_SERVICE_NAME, + GNUNET_SERVICE_OPTION_NONE, + &run, + &callback_client_connect, + &callback_client_disconnect, + NULL, + GNUNET_MQ_hd_var_size( create, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_CREATE, struct GNUNET_MESSENGER_CreateMessage, NULL ), + GNUNET_MQ_hd_fixed_size( update, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_UPDATE, struct GNUNET_MESSENGER_UpdateMessage, NULL ), + GNUNET_MQ_hd_fixed_size( destroy, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_DESTROY, struct GNUNET_MESSENGER_DestroyMessage, NULL ), + GNUNET_MQ_hd_var_size( set_name, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_SET_NAME, struct GNUNET_MESSENGER_NameMessage, NULL ), + GNUNET_MQ_hd_fixed_size( room_open, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_OPEN, struct GNUNET_MESSENGER_RoomMessage, NULL ), + GNUNET_MQ_hd_fixed_size( room_entry, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_ENTRY, struct GNUNET_MESSENGER_RoomMessage, NULL ), + GNUNET_MQ_hd_fixed_size( room_close, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_CLOSE, struct GNUNET_MESSENGER_RoomMessage, NULL ), + GNUNET_MQ_hd_var_size( send_message, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_SEND_MESSAGE, struct GNUNET_MESSENGER_SendMessage, NULL ), + GNUNET_MQ_hd_fixed_size( get_message, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_GET_MESSAGE, struct GNUNET_MESSENGER_RecvMessage, NULL ), + GNUNET_MQ_handler_end()); diff --git a/src/messenger/gnunet-service-messenger.h b/src/messenger/gnunet-service-messenger.h new file mode 100644 index 000000000..85a1d2549 --- /dev/null +++ b/src/messenger/gnunet-service-messenger.h @@ -0,0 +1,121 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_H +#define GNUNET_SERVICE_MESSENGER_H + +#include "platform.h" +#include "gnunet_cadet_service.h" +#include "gnunet_container_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" +#include "gnunet_mq_lib.h" +#include "gnunet_peer_lib.h" +#include "gnunet_protocols.h" +#include "gnunet_util_lib.h" + +/** + * Message to create a handle for a client + */ +struct GNUNET_MESSENGER_CreateMessage +{ + struct GNUNET_MessageHeader header; +}; + +/** + * Message to update the handle (its EGO key) for a client + */ +struct GNUNET_MESSENGER_UpdateMessage +{ + struct GNUNET_MessageHeader header; +}; + +/** + * Message to destroy the handle for a client + */ +struct GNUNET_MESSENGER_DestroyMessage +{ + struct GNUNET_MessageHeader header; +}; + +/** + * Message to receive the current name of a handle + */ +struct GNUNET_MESSENGER_NameMessage +{ + struct GNUNET_MessageHeader header; +}; + +/** + * Message to receive the current public key of a handle + */ +struct GNUNET_MESSENGER_KeyMessage +{ + struct GNUNET_MessageHeader header; + struct GNUNET_IDENTITY_PublicKey pubkey; +}; + +/** + * General message to confirm interaction with a room + */ +struct GNUNET_MESSENGER_RoomMessage +{ + struct GNUNET_MessageHeader header; + + struct GNUNET_PeerIdentity door; + struct GNUNET_HashCode key; +}; + +/** + * Message to receive the current member id of a handle in room + */ +struct GNUNET_MESSENGER_MemberMessage +{ + struct GNUNET_MessageHeader header; + + struct GNUNET_HashCode key; + struct GNUNET_ShortHashCode id; +}; + +/** + * Message to send something into a room + */ +struct GNUNET_MESSENGER_SendMessage +{ + struct GNUNET_MessageHeader header; + struct GNUNET_HashCode key; +}; + +/** + * Message to receive something from a room + */ +struct GNUNET_MESSENGER_RecvMessage +{ + struct GNUNET_MessageHeader header; + struct GNUNET_HashCode key; + struct GNUNET_HashCode hash; +}; + +#endif //GNUNET_SERVICE_MESSENGER_H diff --git a/src/messenger/gnunet-service-messenger_basement.c b/src/messenger/gnunet-service-messenger_basement.c new file mode 100644 index 000000000..190cf2de5 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_basement.c @@ -0,0 +1,58 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_basement.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_basement.h" + +size_t +count_of_tunnels (const struct GNUNET_MESSENGER_ListTunnels *tunnels) +{ + const struct GNUNET_MESSENGER_ListTunnel *element; + size_t count = 0; + + for (element = tunnels->head; element; element = element->next) + count++; + + return count; +} + +int +should_connect_tunnel_to (size_t count, size_t src, size_t dst) +{ + if ((src + 1) % count == dst % count) + return GNUNET_YES; + + return GNUNET_NO; +} + +int +required_connection_between (size_t count, size_t src, size_t dst) +{ + if (GNUNET_YES == should_connect_tunnel_to (count, src, dst)) + return GNUNET_YES; + if (GNUNET_YES == should_connect_tunnel_to (count, dst, src)) + return GNUNET_YES; + + return GNUNET_NO; +} diff --git a/src/messenger/gnunet-service-messenger_basement.h b/src/messenger/gnunet-service-messenger_basement.h new file mode 100644 index 000000000..0a1a9b126 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_basement.h @@ -0,0 +1,66 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_basement.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_BASEMENT_H +#define GNUNET_SERVICE_MESSENGER_BASEMENT_H + +#include "messenger_api_list_tunnels.h" + +/** + * Returns the count of peers in a list (typically from the basement of a room). + * + * @param tunnels List of peer identities + * @return Count of the entries in the list + */ +size_t +count_of_tunnels (const struct GNUNET_MESSENGER_ListTunnels *tunnels); + +/** + * Returns GNUNET_YES or GNUNET_NO to determine if the peer at index src should + * or should not connect outgoing to the peer at index dst to construct a complete + * basement with a given count of peers. + * + * @param count Count of peers + * @param src Source index + * @param dst Destination index + * @return GNUNET_YES or GNUNET_NO based on topologic requirement + */ +int +should_connect_tunnel_to (size_t count, size_t src, size_t dst); + +/** + * Returns GNUNET_YES or GNUNET_NO to determine if the peers of index src and + * index dst should be connected in any direction to construct a complete + * basement with a given count of peers. + * + * @param count Count of peers + * @param src Source index + * @param dst Destination index + * @return GNUNET_YES or GNUNET_NO based on topologic requirement + */ +int +required_connection_between (size_t count, size_t src, size_t dst); + +#endif //GNUNET_SERVICE_MESSENGER_BASEMENT_H diff --git a/src/messenger/gnunet-service-messenger_contact.c b/src/messenger/gnunet-service-messenger_contact.c new file mode 100644 index 000000000..1ec125402 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_contact.c @@ -0,0 +1,96 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_contact.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_contact.h" + +struct GNUNET_MESSENGER_SrvContact* +create_contact (const struct GNUNET_IDENTITY_PublicKey *key) +{ + struct GNUNET_MESSENGER_SrvContact *contact = GNUNET_new(struct GNUNET_MESSENGER_SrvContact); + + contact->name = NULL; + contact->rc = 0; + + GNUNET_memcpy(&(contact->public_key), key, sizeof(contact->public_key)); + + return contact; +} + +void +destroy_contact (struct GNUNET_MESSENGER_SrvContact *contact) +{ + if (contact->name) + GNUNET_free(contact->name); + + GNUNET_free(contact); +} + +const char* +get_contact_name (const struct GNUNET_MESSENGER_SrvContact *contact) +{ + return contact->name; +} + +void +set_contact_name (struct GNUNET_MESSENGER_SrvContact *contact, const char *name) +{ + GNUNET_assert(name); + + if (contact->name) + GNUNET_free(contact->name); + + contact->name = GNUNET_strdup(name); +} + +const struct GNUNET_IDENTITY_PublicKey* +get_contact_key (const struct GNUNET_MESSENGER_SrvContact *contact) +{ + return &(contact->public_key); +} + +void +increase_contact_rc (struct GNUNET_MESSENGER_SrvContact *contact) +{ + contact->rc++; +} + +int +decrease_contact_rc (struct GNUNET_MESSENGER_SrvContact *contact) +{ + if (contact->rc > 0) + contact->rc--; + + return contact->rc ? GNUNET_NO : GNUNET_YES; +} + +const struct GNUNET_HashCode* +get_contact_id_from_key (const struct GNUNET_MESSENGER_SrvContact *contact) +{ + static struct GNUNET_HashCode id; + + GNUNET_CRYPTO_hash (&(contact->public_key), sizeof(contact->public_key), &id); + + return &id; +} diff --git a/src/messenger/gnunet-service-messenger_contact.h b/src/messenger/gnunet-service-messenger_contact.h new file mode 100644 index 000000000..4a4f8bf0f --- /dev/null +++ b/src/messenger/gnunet-service-messenger_contact.h @@ -0,0 +1,112 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_contact.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_CONTACT_H +#define GNUNET_SERVICE_MESSENGER_CONTACT_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" + +struct GNUNET_MESSENGER_SrvContact +{ + char *name; + size_t rc; + + struct GNUNET_IDENTITY_PublicKey public_key; +}; + +/** + * Creates and allocates a new contact with a given public key from an EGO. + * + * @param key Public key + * @return New contact + */ +struct GNUNET_MESSENGER_SrvContact* +create_contact (const struct GNUNET_IDENTITY_PublicKey *key); + +/** + * Destroys a contact and frees its memory fully. + * + * @param contact Contact + */ +void +destroy_contact (struct GNUNET_MESSENGER_SrvContact *contact); + +/** + * Returns the current name of a given contact or NULL if no valid name was assigned yet. + * + * @param contact Contact + * @return Name of the contact or NULL + */ +const char* +get_contact_name (const struct GNUNET_MESSENGER_SrvContact *contact); + +/** + * Changes the current name of a given contact by copying it from the parameter name. + * + * @param contact Contact + * @param name Valid name (may not be NULL!) + */ +void +set_contact_name (struct GNUNET_MESSENGER_SrvContact *contact, const char *name); + +/** + * Returns the public key of a given contact. + * + * @param contact Contact + * @return Public key of the contact + */ +const struct GNUNET_IDENTITY_PublicKey* +get_contact_key (const struct GNUNET_MESSENGER_SrvContact *contact); + +/** + * Increases the reference counter of a given contact which is zero as default. + * + * @param contact Contact + */ +void +increase_contact_rc (struct GNUNET_MESSENGER_SrvContact *contact); + +/** + * Decreases the reference counter if possible (can not underflow!) of a given contact + * and returns GNUNET_YES if the counter is equal to zero, otherwise GNUNET_NO. + * + * @param contact Contact + * @return GNUNET_YES or GNUNET_NO depending on the reference counter + */ +int +decrease_contact_rc (struct GNUNET_MESSENGER_SrvContact *contact); + +/** + * Returns the resulting hashcode of the public key from a given contact. + * + * @param contact Contact + * @return Hash of the contacts public key + */ +const struct GNUNET_HashCode* +get_contact_id_from_key (const struct GNUNET_MESSENGER_SrvContact *contact); + +#endif //GNUNET_SERVICE_MESSENGER_CONTACT_H diff --git a/src/messenger/gnunet-service-messenger_handle.c b/src/messenger/gnunet-service-messenger_handle.c new file mode 100644 index 000000000..38ad6fbb4 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_handle.c @@ -0,0 +1,503 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_handle.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_handle.h" + +#include "gnunet-service-messenger.h" +#include "gnunet-service-messenger_message_kind.h" + +struct GNUNET_MESSENGER_SrvHandle* +create_handle (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MQ_Handle *mq) +{ + struct GNUNET_MESSENGER_SrvHandle *handle = GNUNET_new(struct GNUNET_MESSENGER_SrvHandle); + + handle->service = service; + handle->mq = mq; + + handle->name = NULL; + + handle->operation = NULL; + + handle->ego = NULL; + + handle->member_ids = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + + return handle; +} + +int +iterate_free_member_ids (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + GNUNET_free(value); + + return GNUNET_YES; +} + +void +destroy_handle (struct GNUNET_MESSENGER_SrvHandle *handle) +{ + if (handle->service->dir) + save_handle_configuration(handle); + + if (handle->operation) + GNUNET_IDENTITY_cancel (handle->operation); + + if (handle->name) + GNUNET_free(handle->name); + + GNUNET_CONTAINER_multihashmap_iterate (handle->member_ids, iterate_free_member_ids, NULL); + GNUNET_CONTAINER_multihashmap_destroy (handle->member_ids); + + GNUNET_free(handle); +} + +void +get_handle_data_subdir (struct GNUNET_MESSENGER_SrvHandle *handle, const char *name, char **dir) +{ + if (name) + GNUNET_asprintf (dir, "%s%s%c%s%c", handle->service->dir, "identities", + DIR_SEPARATOR, name, DIR_SEPARATOR); + else + GNUNET_asprintf (dir, "%s%s%c", handle->service->dir, "anonymous", + DIR_SEPARATOR); +} + +static int +create_handle_member_id (const struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key) +{ + struct GNUNET_ShortHashCode *random_id = generate_service_new_member_id (handle->service, key); + + if (!random_id) + return GNUNET_NO; + + if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (handle->member_ids, key, random_id, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + { + GNUNET_free(random_id); + return GNUNET_NO; + } + + GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Created a new member id (%s) for room: %s\n", + GNUNET_sh2s(random_id), GNUNET_h2s(key)); + + return GNUNET_YES; +} + +const struct GNUNET_ShortHashCode* +get_handle_member_id (const struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key) +{ + return GNUNET_CONTAINER_multihashmap_get (handle->member_ids, key); +} + +void +change_handle_member_id (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key, + const struct GNUNET_ShortHashCode *unique_id) +{ + struct GNUNET_ShortHashCode *member_id = GNUNET_CONTAINER_multihashmap_get (handle->member_ids, key); + + if (member_id) + { + GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Changed a member id (%s) for room (%s) ", + GNUNET_sh2s(member_id), GNUNET_h2s(key)); + GNUNET_log(GNUNET_ERROR_TYPE_INFO, "into (%s).\n", + GNUNET_sh2s(unique_id)); + + GNUNET_memcpy(member_id, unique_id, sizeof(*unique_id)); + + struct GNUNET_MESSENGER_MemberMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_MEMBER_ID); + + GNUNET_memcpy(&(msg->key), key, sizeof(*key)); + GNUNET_memcpy(&(msg->id), member_id, sizeof(*member_id)); + + GNUNET_MQ_send (handle->mq, env); + } + else + { + member_id = GNUNET_new(struct GNUNET_ShortHashCode); + GNUNET_memcpy(member_id, unique_id, sizeof(*member_id)); + + if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (handle->member_ids, key, member_id, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + GNUNET_free(member_id); + } +} + +static void +change_handle_name (struct GNUNET_MESSENGER_SrvHandle *handle, const char *name) +{ + if (handle->name) + GNUNET_free(handle->name); + + handle->name = name ? GNUNET_strdup(name) : NULL; + + const uint16_t name_len = handle->name ? strlen (handle->name) : 0; + + struct GNUNET_MESSENGER_NameMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg_extra(msg, name_len + 1, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_GET_NAME); + + char *extra = ((char*) msg) + sizeof(*msg); + + if (name_len) + GNUNET_memcpy(extra, handle->name, name_len); + + extra[name_len] = '\0'; + + GNUNET_MQ_send (handle->mq, env); +} + +static void +change_handle_ego (struct GNUNET_MESSENGER_SrvHandle *handle, struct GNUNET_MESSENGER_Ego *ego) +{ + handle->ego = ego; + + ego = get_handle_ego(handle); + + struct GNUNET_MESSENGER_KeyMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_GET_KEY); + + GNUNET_memcpy(&(msg->pubkey), &(ego->pub), sizeof(ego->pub)); + + GNUNET_MQ_send (handle->mq, env); +} + +struct GNUNET_MESSENGER_Ego* +get_handle_ego (struct GNUNET_MESSENGER_SrvHandle *handle) +{ + static struct GNUNET_MESSENGER_Ego anonymous; + static int read_keys = 0; + + if (handle->ego) + return handle->ego; + + if (!read_keys) + { + struct GNUNET_IDENTITY_Ego* ego = GNUNET_IDENTITY_ego_get_anonymous (); + GNUNET_memcpy(&(anonymous.priv), GNUNET_IDENTITY_ego_get_private_key(ego), sizeof(anonymous.priv)); + GNUNET_IDENTITY_ego_get_public_key(ego, &(anonymous.pub)); + read_keys = 1; + } + + return &anonymous; +} + +void +setup_handle_name (struct GNUNET_MESSENGER_SrvHandle *handle, const char *name) +{ + change_handle_name (handle, name); + change_handle_ego (handle, handle->name? lookup_service_ego(handle->service, handle->name) : NULL); + + if (handle->service->dir) + load_handle_configuration(handle); +} + +struct GNUNET_MESSENGER_MessageHandle +{ + struct GNUNET_MESSENGER_SrvHandle *handle; + struct GNUNET_MESSENGER_Message *message; +}; + +static int +iterate_send_message (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_MessageHandle *msg_handle = cls; + + send_handle_message (msg_handle->handle, key, msg_handle->message); + + return GNUNET_YES; +} + +static void +callback_ego_create (void *cls, const struct GNUNET_IDENTITY_PrivateKey *key, const char *emsg) +{ + struct GNUNET_MESSENGER_SrvHandle *handle = cls; + + handle->operation = NULL; + + if (emsg) + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "%s\n", emsg); + + if (key) + { + struct GNUNET_MESSENGER_MessageHandle msg_handle; + + msg_handle.handle = handle; + msg_handle.message = create_message_key (key); + + GNUNET_CONTAINER_multihashmap_iterate (handle->member_ids, iterate_send_message, &msg_handle); + + destroy_message (msg_handle.message); + + update_service_ego(handle->service, handle->name, key); + + change_handle_ego (handle, lookup_service_ego(handle->service, handle->name)); + } +} + +int +update_handle (struct GNUNET_MESSENGER_SrvHandle *handle) +{ + GNUNET_assert(handle); + + if (!handle->name) + return GNUNET_SYSERR; + + struct GNUNET_MESSENGER_Ego *ego = lookup_service_ego(handle->service, handle->name); + + if (!ego) + handle->operation = GNUNET_IDENTITY_create (handle->service->identity, handle->name, NULL, + GNUNET_IDENTITY_TYPE_ECDSA, callback_ego_create, handle); + else + change_handle_ego (handle, ego); + + return GNUNET_OK; +} + +int +set_handle_name (struct GNUNET_MESSENGER_SrvHandle *handle, const char *name) +{ + GNUNET_assert(handle); + + if ((name) && (lookup_service_ego(handle->service, name))) + return GNUNET_NO; + + struct GNUNET_IDENTITY_Operation *operation = handle->operation; + + if (handle->name) + handle->operation = GNUNET_IDENTITY_rename (handle->service->identity, handle->name, name, NULL, NULL); + + char *old_dir; + get_handle_data_subdir (handle, handle->name, &old_dir); + + char *new_dir; + get_handle_data_subdir (handle, name, &new_dir); + + int result = 0; + + if (GNUNET_YES == GNUNET_DISK_directory_test (old_dir, GNUNET_YES)) + { + GNUNET_DISK_directory_create_for_file (new_dir); + + result = rename (old_dir, new_dir); + } + else if (GNUNET_YES == GNUNET_DISK_directory_test (new_dir, GNUNET_NO)) + result = -1; + + if (0 == result) + { + struct GNUNET_MESSENGER_MessageHandle msg_handle; + + msg_handle.handle = handle; + msg_handle.message = create_message_name (name); + + GNUNET_CONTAINER_multihashmap_iterate (handle->member_ids, iterate_send_message, &msg_handle); + + destroy_message (msg_handle.message); + + change_handle_name (handle, name); + + if (operation) + GNUNET_IDENTITY_cancel (operation); + } + else + { + if (handle->operation) + { + GNUNET_IDENTITY_cancel (handle->operation); + + handle->operation = operation; + } + } + + GNUNET_free(old_dir); + GNUNET_free(new_dir); + + return (result == 0 ? GNUNET_OK : GNUNET_NO); +} + +int +open_handle_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key) +{ + if ((!get_handle_member_id (handle, key)) && (GNUNET_YES != create_handle_member_id (handle, key))) + return GNUNET_NO; + + return open_service_room (handle->service, handle, key); +} + +int +entry_handle_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_PeerIdentity *door, + const struct GNUNET_HashCode *key) +{ + if ((!get_handle_member_id (handle, key)) && (GNUNET_YES != create_handle_member_id (handle, key))) + return GNUNET_NO; + + return entry_service_room (handle->service, handle, door, key); +} + +int +close_handle_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key) +{ + if (!get_handle_member_id (handle, key)) + return GNUNET_NO; + + return close_service_room (handle->service, handle, key); +} + +int +send_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key, + struct GNUNET_MESSENGER_Message *message) +{ + const struct GNUNET_ShortHashCode *id = get_handle_member_id (handle, key); + + if (!id) + { + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "It is required to be a member of a room to send messages!\n"); + return GNUNET_NO; + } + + struct GNUNET_MESSENGER_SrvRoom *room = get_service_room (handle->service, key); + + if (!room) + { + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "The room (%s) is unknown!\n", GNUNET_h2s (key)); + return GNUNET_NO; + } + + struct GNUNET_HashCode hash; + + GNUNET_memcpy(&(message->header.sender_id), id, sizeof(*id)); + + send_room_message (room, handle, message, &hash); + return GNUNET_YES; +} + +static int callback_scan_for_rooms(void* cls, const char *filename) { + struct GNUNET_MESSENGER_SrvHandle* handle = cls; + + struct GNUNET_CONFIGURATION_Handle* cfg = GNUNET_CONFIGURATION_create(); + + if ((GNUNET_YES == GNUNET_DISK_file_test(filename)) && + (GNUNET_OK == GNUNET_CONFIGURATION_parse(cfg, filename))) + { + struct GNUNET_HashCode key; + struct GNUNET_ShortHashCode member_id; + + if ((GNUNET_OK == GNUNET_CONFIGURATION_get_data(cfg, "room", "key", &key, sizeof(key))) && + (GNUNET_OK == GNUNET_CONFIGURATION_get_data(cfg, "room", "member_id", &member_id, sizeof(member_id)))) + change_handle_member_id(handle, &key, &member_id); + } + + GNUNET_CONFIGURATION_destroy(cfg); + return GNUNET_OK; +} + +void load_handle_configuration(struct GNUNET_MESSENGER_SrvHandle *handle) { + char* id_dir; + get_handle_data_subdir(handle, handle->name, &id_dir); + + if (GNUNET_YES == GNUNET_DISK_directory_test(id_dir, GNUNET_YES)) + { + char* scan_dir; + GNUNET_asprintf(&scan_dir, "%s%s%c", id_dir, "rooms", DIR_SEPARATOR); + + if (GNUNET_OK == GNUNET_DISK_directory_test(scan_dir, GNUNET_YES)) + GNUNET_DISK_directory_scan(scan_dir, callback_scan_for_rooms, handle); + + GNUNET_free(scan_dir); + } + + GNUNET_free(id_dir); +} + +static int +iterate_save_rooms(void* cls, const struct GNUNET_HashCode* key, void* value) +{ + struct GNUNET_MESSENGER_SrvHandle* handle = cls; + struct GNUNET_ShortHashCode* member_id = value; + + char* id_dir; + get_handle_data_subdir(handle, handle->name, &id_dir); + + char* filename; + GNUNET_asprintf(&filename, "%s%s%c%s.cfg", + id_dir, "rooms", DIR_SEPARATOR, + GNUNET_h2s(key)); + + GNUNET_free(id_dir); + + struct GNUNET_CONFIGURATION_Handle* cfg = GNUNET_CONFIGURATION_create(); + + char* key_data = GNUNET_STRINGS_data_to_string_alloc(key, sizeof(*key)); + + if (key_data) + { + GNUNET_CONFIGURATION_set_value_string(cfg, "room", "key", key_data); + + GNUNET_free(key_data); + } + + char* member_id_data = GNUNET_STRINGS_data_to_string_alloc(member_id, sizeof(*member_id)); + + if (member_id_data) + { + GNUNET_CONFIGURATION_set_value_string(cfg, "room", "member_id", member_id_data); + + GNUNET_free(member_id_data); + } + + GNUNET_CONFIGURATION_write(cfg, filename); + GNUNET_CONFIGURATION_destroy(cfg); + + GNUNET_free(filename); + + return GNUNET_YES; +} + +void save_handle_configuration(struct GNUNET_MESSENGER_SrvHandle *handle) +{ + char* id_dir; + get_handle_data_subdir(handle, handle->name, &id_dir); + + if ((GNUNET_YES == GNUNET_DISK_directory_test(id_dir, GNUNET_NO)) || + (GNUNET_OK == GNUNET_DISK_directory_create(id_dir))) + { + char* save_dir; + GNUNET_asprintf(&save_dir, "%s%s%c", id_dir, "rooms", DIR_SEPARATOR); + + if ((GNUNET_YES == GNUNET_DISK_directory_test(save_dir, GNUNET_NO)) || + (GNUNET_OK == GNUNET_DISK_directory_create(save_dir))) + GNUNET_CONTAINER_multihashmap_iterate(handle->member_ids, iterate_save_rooms, handle); + + GNUNET_free(save_dir); + } + + GNUNET_free(id_dir); +} diff --git a/src/messenger/gnunet-service-messenger_handle.h b/src/messenger/gnunet-service-messenger_handle.h new file mode 100644 index 000000000..81cf377a8 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_handle.h @@ -0,0 +1,216 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_handle.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_HANDLE_H +#define GNUNET_SERVICE_MESSENGER_HANDLE_H + +#include "platform.h" +#include "gnunet_cadet_service.h" +#include "gnunet_container_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" +#include "gnunet_peer_lib.h" +#include "gnunet_mq_lib.h" + +#include "gnunet-service-messenger_service.h" + +#include "messenger_api_ego.h" +#include "messenger_api_message.h" + +struct GNUNET_MESSENGER_SrvHandle +{ + struct GNUNET_MESSENGER_Service *service; + struct GNUNET_MQ_Handle *mq; + + char *name; + + struct GNUNET_IDENTITY_Operation *operation; + + struct GNUNET_MESSENGER_Ego *ego; + + struct GNUNET_CONTAINER_MultiHashMap *member_ids; +}; + +/** + * Creates and allocates a new handle related to a service and using a given mq (message queue). + * + * @param service MESSENGER Service + * @param mq Message queue + * @return New handle + */ +struct GNUNET_MESSENGER_SrvHandle* +create_handle (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MQ_Handle *mq); + +/** + * Destroys a handle and frees its memory fully. + * + * @param handle Handle + */ +void +destroy_handle (struct GNUNET_MESSENGER_SrvHandle *handle); + +/** + * Writes the path of the directory for a given handle using a specific name to the parameter + * dir. This directory will be used to store data regarding the handle and its messages. + * + * @param handle Handle + * @param name Potential name of the handle + * @param dir[out] Path to store data + */ +void +get_handle_data_subdir (struct GNUNET_MESSENGER_SrvHandle *handle, const char *name, char **dir); + +/** + * Returns the member id of a given handle in a specific room. + * + * If the handle is not a member of the specific room, NULL gets returned. + * + * @param handle Handle + * @param key Key of a room + * @return Member id or NULL + */ +const struct GNUNET_ShortHashCode* +get_handle_member_id (const struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key); + +/** + * Changes the member id of a given handle in a specific room to match a unique_id. + * + * The client connected to the handle will be informed afterwards automatically. + * + * @param handle Handle + * @param key Key of a room + * @param unique_id Unique member id + */ +void +change_handle_member_id (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key, + const struct GNUNET_ShortHashCode *unique_id); + +/** + * Returns the EGO used by a given handle. + * + * @param handle Handle + * @return EGO keypair + */ +struct GNUNET_MESSENGER_Ego* +get_handle_ego (struct GNUNET_MESSENGER_SrvHandle *handle); + +/** + * Tries to set the name and EGO key of a handle initially by looking up a specific name. + * + * @param handle Handle + * @param name Name (optionally: valid EGO name) + */ +void +setup_handle_name (struct GNUNET_MESSENGER_SrvHandle *handle, const char *name); + +/** + * Tries to change the keypair of an EGO of a handle under the same name and informs all rooms + * about the change automatically. + * + * @param handle Handle + * @return GNUNET_OK on success, otherwise GNUNET_SYSERR + */ +int +update_handle (struct GNUNET_MESSENGER_SrvHandle *handle); + +/** + * Tries to rename the handle which implies renaming the EGO its using and moving all related data into + * the directory fitting to the changed name. + * + * The client connected to the handle will be informed afterwards automatically. + * + * @param handle Handle + * @param name New name + * @return GNUNET_OK on success, otherwise GNUNET_NO + */ +int +set_handle_name (struct GNUNET_MESSENGER_SrvHandle *handle, const char *name); + +/** + * Makes a given handle a member of the room using a specific key and opens the + * room from the handles service. + * + * @param handle Handle + * @param key Key of a room + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +open_handle_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key); + +/** + * Makes a given handle a member of the room using a specific key and enters the room + * through a tunnel to a peer identified by a given door (peer identity). + * + * @param handle Handle + * @param door Peer identity + * @param key Key of a room + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +entry_handle_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_PeerIdentity *door, + const struct GNUNET_HashCode *key); + +/** + * Removes the membership of the room using a specific key and closes it if no other handle + * from this service is still a member of it. + * + * @param handle Handle + * @param key Key of a room + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +close_handle_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key); + +/** + * Sends a message from a given handle to the room using a specific key. + * + * @param handle Handle + * @param key Key of a room + * @param message Message + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +send_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key, + struct GNUNET_MESSENGER_Message *message); + +/** + * Loads member ids and other potential configuration from a given handle which + * depends on the given name the handle uses. + * + * @param handle Handle + */ +void +load_handle_configuration(struct GNUNET_MESSENGER_SrvHandle *handle); + +/** + * Saves member ids and other potential configuration from a given handle which + * depends on the given name the handle uses. + * + * @param handle Handle + */ +void +save_handle_configuration(struct GNUNET_MESSENGER_SrvHandle *handle); + +#endif //GNUNET_SERVICE_MESSENGER_HANDLE_H diff --git a/src/messenger/gnunet-service-messenger_list_handles.c b/src/messenger/gnunet-service-messenger_list_handles.c new file mode 100644 index 000000000..16a160dea --- /dev/null +++ b/src/messenger/gnunet-service-messenger_list_handles.c @@ -0,0 +1,95 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_list_handles.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_list_handles.h" + +#include "gnunet-service-messenger_handle.h" + +void +init_list_handles (struct GNUNET_MESSENGER_ListHandles *handles) +{ + GNUNET_assert(handles); + + handles->head = NULL; + handles->tail = NULL; +} + +void +clear_list_handles (struct GNUNET_MESSENGER_ListHandles *handles) +{ + GNUNET_assert(handles); + + while (handles->head) + { + struct GNUNET_MESSENGER_ListHandle *element = handles->head; + + GNUNET_CONTAINER_DLL_remove(handles->head, handles->tail, element); + destroy_handle (element->handle); + GNUNET_free(element); + } + + handles->head = NULL; + handles->tail = NULL; +} + +void +add_list_handle (struct GNUNET_MESSENGER_ListHandles *handles, void *handle) +{ + struct GNUNET_MESSENGER_ListHandle *element = GNUNET_new(struct GNUNET_MESSENGER_ListHandle); + + element->handle = handle; + + GNUNET_CONTAINER_DLL_insert_tail(handles->head, handles->tail, element); +} + +int +remove_list_handle (struct GNUNET_MESSENGER_ListHandles *handles, void *handle) +{ + struct GNUNET_MESSENGER_ListHandle *element; + + for (element = handles->head; element; element = element->next) + if (element->handle == handle) + break; + + if (!element) + return GNUNET_NO; + + GNUNET_CONTAINER_DLL_remove(handles->head, handles->tail, element); + GNUNET_free(element); + + return GNUNET_YES; +} + +void* +find_list_handle_by_member (struct GNUNET_MESSENGER_ListHandles *handles, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_ListHandle *element; + + for (element = handles->head; element; element = element->next) + if (get_handle_member_id ((struct GNUNET_MESSENGER_SrvHandle*) element->handle, key)) + return element->handle; + + return NULL; +} diff --git a/src/messenger/gnunet-service-messenger_list_handles.h b/src/messenger/gnunet-service-messenger_list_handles.h new file mode 100644 index 000000000..fe92cc58a --- /dev/null +++ b/src/messenger/gnunet-service-messenger_list_handles.h @@ -0,0 +1,96 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_list_handles.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_LIST_HANDLES_H +#define GNUNET_SERVICE_MESSENGER_LIST_HANDLES_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_container_lib.h" + +struct GNUNET_MESSENGER_ListHandle +{ + struct GNUNET_MESSENGER_ListHandle *prev; + struct GNUNET_MESSENGER_ListHandle *next; + + void *handle; +}; + +struct GNUNET_MESSENGER_ListHandles +{ + struct GNUNET_MESSENGER_ListHandle *head; + struct GNUNET_MESSENGER_ListHandle *tail; +}; + +/** + * Initializes list of handles as empty list. + * + * @param handles List of handles + */ +void +init_list_handles (struct GNUNET_MESSENGER_ListHandles *handles); + +/** + * Destroys remaining handles and clears the list. + * + * @param handles List of handles + */ +void +clear_list_handles (struct GNUNET_MESSENGER_ListHandles *handles); + +/** + * Adds a specific handle to the end of the list. + * + * @param handles List of handles + * @param handle Handle + */ +void +add_list_handle (struct GNUNET_MESSENGER_ListHandles *handles, void *handle); + +/** + * Removes the first entry matching with a specific handle from the list and + * returns GNUNET_YES on success or GNUNET_NO on failure. + * + * @param handles List of handles + * @param handle Handle + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +remove_list_handle (struct GNUNET_MESSENGER_ListHandles *handles, void *handle); + +/** + * Searches linearly through the list of handles for members of a specific room + * which is identified by a given key. + * + * If no handle is found which is a current member, NULL gets returned. + * + * @param handles List of handles + * @param key Common key of a room + * @return First handle which is a current member + */ +void* +find_list_handle_by_member (struct GNUNET_MESSENGER_ListHandles *handles, const struct GNUNET_HashCode *key); + +#endif //GNUNET_SERVICE_MESSENGER_LIST_HANDLES_H diff --git a/src/messenger/gnunet-service-messenger_list_messages.c b/src/messenger/gnunet-service-messenger_list_messages.c new file mode 100644 index 000000000..c4f1f7043 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_list_messages.c @@ -0,0 +1,76 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_list_messages.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_list_messages.h" + +void +init_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) +{ + GNUNET_assert(messages); + + messages->head = NULL; + messages->tail = NULL; +} + +void +clear_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) +{ + GNUNET_assert(messages); + + while (messages->head) + { + struct GNUNET_MESSENGER_ListMessage *element = messages->head; + + GNUNET_CONTAINER_DLL_remove(messages->head, messages->tail, element); + GNUNET_free(element); + } + + messages->head = NULL; + messages->tail = NULL; +} + +void +add_to_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_ListMessage *element = GNUNET_new(struct GNUNET_MESSENGER_ListMessage); + + GNUNET_memcpy(&(element->hash), hash, sizeof(struct GNUNET_HashCode)); + + GNUNET_CONTAINER_DLL_insert_tail(messages->head, messages->tail, element); +} + +void +remove_from_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_ListMessage *element; + + for (element = messages->head; element; element = element->next) + if (0 == GNUNET_CRYPTO_hash_cmp (&(element->hash), hash)) + { + GNUNET_CONTAINER_DLL_remove(messages->head, messages->tail, element); + GNUNET_free(element); + break; + } +} diff --git a/src/messenger/gnunet-service-messenger_list_messages.h b/src/messenger/gnunet-service-messenger_list_messages.h new file mode 100644 index 000000000..266c30ec6 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_list_messages.h @@ -0,0 +1,81 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_list_messages.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_LIST_MESSAGES_H +#define GNUNET_SERVICE_MESSENGER_LIST_MESSAGES_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_container_lib.h" + +struct GNUNET_MESSENGER_ListMessage +{ + struct GNUNET_MESSENGER_ListMessage *prev; + struct GNUNET_MESSENGER_ListMessage *next; + + struct GNUNET_HashCode hash; +}; + +struct GNUNET_MESSENGER_ListMessages +{ + struct GNUNET_MESSENGER_ListMessage *head; + struct GNUNET_MESSENGER_ListMessage *tail; +}; + +/** + * Initializes list of message hashes as empty list. + * + * @param messages List of hashes + */ +void +init_list_messages (struct GNUNET_MESSENGER_ListMessages *messages); + +/** + * Clears the list of message hashes. + * + * @param messages List of hashes + */ +void +clear_list_messages (struct GNUNET_MESSENGER_ListMessages *messages); + +/** + * Adds a specific hash from a message to the end of the list. + * + * @param messages List of hashes + * @param hash Hash of message + */ +void +add_to_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, const struct GNUNET_HashCode *hash); + +/** + * Removes the first entry with a matching hash from the list. + * + * @param messages List of hashes + * @param hash Hash of message + */ +void +remove_from_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, const struct GNUNET_HashCode *hash); + +#endif //GNUNET_SERVICE_MESSENGER_LIST_MESSAGES_H diff --git a/src/messenger/gnunet-service-messenger_message_handle.c b/src/messenger/gnunet-service-messenger_message_handle.c new file mode 100644 index 000000000..1652435c8 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_handle.c @@ -0,0 +1,130 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_handle.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_message_handle.h" + +void +handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_SrvContact *contact = get_room_contact (room, &(message->header.sender_id)); + + if (!contact) + add_room_contact (room, &(message->header.sender_id), &(message->body.join.key)); + + struct GNUNET_MESSENGER_MemberInfo *info = get_room_member_info (room, &(message->header.sender_id)); + + if (!info) + { + info = GNUNET_new(struct GNUNET_MESSENGER_MemberInfo); + + info->access = GNUNET_MESSENGER_MEMBER_UNKNOWN; + init_list_messages (&(info->session_messages)); + } + else + clear_list_messages (&(info->session_messages)); + + if (GNUNET_YES == GNUNET_CONTAINER_multishortmap_put (room->member_infos, &(message->header.sender_id), info, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + add_to_list_messages (&(info->session_messages), hash); +} + +void +handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_MemberInfo *info = get_room_member_info (room, &(message->header.sender_id)); + + if (info) + clear_list_messages (&(info->session_messages)); +} + +void +handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_SrvContact *contact = get_room_contact (room, &(message->header.sender_id)); + + if (contact) + set_contact_name (contact, message->body.name.name); + + struct GNUNET_MESSENGER_MemberInfo *info = get_room_member_info (room, &(message->header.sender_id)); + + if (info) + add_to_list_messages (&(info->session_messages), hash); +} + +void +handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_SrvContact *contact = get_room_contact (room, &(message->header.sender_id)); + + if (contact) + swap_service_contact_by_pubkey (room->service, contact, &(message->body.key.key)); + + struct GNUNET_MESSENGER_MemberInfo *info = get_room_member_info (room, &(message->header.sender_id)); + + if (info) + add_to_list_messages (&(info->session_messages), hash); +} + +void +handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + if (GNUNET_NO == contains_list_tunnels (&(room->basement), &(message->body.peer.peer))) + add_to_list_tunnels (&(room->basement), &(message->body.peer.peer)); + + if (room->peer_message) + rebuild_room_basement_structure (room); +} + +void +handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_MemberInfo *info = get_room_member_info (room, &(message->header.sender_id)); + + if (info) + add_to_list_messages (&(info->session_messages), hash); + + switch_room_member_id (room, &(message->header.sender_id), &(message->body.id.id), hash); +} + +void +handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels (&(room->basement), &(message->body.peer.peer), NULL); + + if (!element) + return; + + remove_from_list_tunnels (&(room->basement), element); + + if (room->peer_message) + rebuild_room_basement_structure (room); +} diff --git a/src/messenger/gnunet-service-messenger_message_handle.h b/src/messenger/gnunet-service-messenger_message_handle.h new file mode 100644 index 000000000..d091e1d11 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_handle.h @@ -0,0 +1,128 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_handle.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_MESSAGE_HANDLE_H +#define GNUNET_SERVICE_MESSENGER_MESSAGE_HANDLE_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" + +#include "gnunet-service-messenger_message_kind.h" + +#include "gnunet-service-messenger_tunnel.h" +#include "messenger_api_message.h" + +/** + * Handles a received or sent join message to make changes of current member information. + * (add matching member and clear member info) + * + * @param room Room of the message + * @param tunnel Receiving/sending connection (may be NULL) + * @param message JOIN-Message + * @param hash Hash of the message + */ +void +handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received or sent leave message to make changes of current member information. + * (remove matching member and clear member info) + * + * @param room Room of the message + * @param tunnel Receiving/sending connection (may be NULL) + * @param message LEAVE-Message + * @param hash Hash of the message + */ +void +handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received or sent name message to rename a current member. + * (change name of matching member) + * + * @param room Room of the message + * @param tunnel Receiving/sending connection (may be NULL) + * @param message NAME-Message + * @param hash Hash of the message + */ +void +handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received or sent key message to change the key of a member and rearrange the contacts accordingly. + * (move the member in the contacts and change its key) + * + * @param room Room of the message + * @param tunnel Receiving/sending connection (may be NULL) + * @param message KEY-Message + * @param hash Hash of the message + */ +void +handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received or sent peer message to make changes of the basement in the room. + * (add a new peer to the basement and restructure connections based on updated list of peers) + * + * @param room Room of the message + * @param tunnel Receiving/sending connection (may be NULL) + * @param message PEER-Message + * @param hash Hash of the message + */ +void +handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received or sent id message to change a members id. + * (change id of matching member) + * + * @param room Room of the message + * @param tunnel Receiving/sending connection (may be NULL) + * @param message ID-Message + * @param hash Hash of the message + */ +void +handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received or sent miss message to drop a peer from the basement in the room. + * (remove a peer from the basement and restructure connections based on updated list of peers) + * + * @param room Room of the message + * @param tunnel Receiving/sending connection (may be NULL) + * @param message MISS-Message + * @param hash Hash of the message + */ +void +handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +#endif //GNUNET_SERVICE_MESSENGER_MESSAGE_HANDLE_H diff --git a/src/messenger/gnunet-service-messenger_message_kind.c b/src/messenger/gnunet-service-messenger_message_kind.c new file mode 100644 index 000000000..9c829fe09 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_kind.c @@ -0,0 +1,192 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_kind.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_message_kind.h" +#include "gnunet-service-messenger_util.h" + +struct GNUNET_MESSENGER_Message* +create_message_info (struct GNUNET_MESSENGER_Ego *ego, struct GNUNET_CONTAINER_MultiShortmap *members) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_INFO); + + if (!message) + return NULL; + + GNUNET_memcpy(&(message->body.info.host_key), &(ego->pub), sizeof(ego->pub)); + + if (GNUNET_YES == generate_free_member_id (&(message->body.info.unique_id), members)) + return message; + else + { + destroy_message (message); + return NULL; + } +} + +struct GNUNET_MESSENGER_Message* +create_message_join (struct GNUNET_MESSENGER_Ego *ego) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_JOIN); + + if (!message) + return NULL; + + GNUNET_memcpy(&(message->body.join.key), &(ego->pub), sizeof(ego->pub)); + + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_leave () +{ + return create_message (GNUNET_MESSENGER_KIND_LEAVE); +} + +struct GNUNET_MESSENGER_Message* +create_message_name (const char *name) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_NAME); + + if (!message) + return NULL; + + message->body.name.name = GNUNET_strdup(name); + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_key (const struct GNUNET_IDENTITY_PrivateKey *key) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_KEY); + + if (!message) + return NULL; + + GNUNET_IDENTITY_key_get_public (key, &(message->body.key.key)); + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_peer (const struct GNUNET_MESSENGER_Service *service) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_PEER); + + if (!message) + return NULL; + + if (GNUNET_OK == get_service_peer_identity (service, &(message->body.peer.peer))) + return message; + else + { + destroy_message (message); + return NULL; + } +} + +struct GNUNET_MESSENGER_Message* +create_message_id (const struct GNUNET_ShortHashCode *unique_id) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_ID); + + if (!message) + return NULL; + + GNUNET_memcpy(&(message->body.id.id), unique_id, sizeof(struct GNUNET_ShortHashCode)); + + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_miss (const struct GNUNET_PeerIdentity *peer) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_MISS); + + if (!message) + { + return NULL; + } + + GNUNET_memcpy(&(message->body.miss.peer), peer, sizeof(struct GNUNET_PeerIdentity)); + + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_merge (const struct GNUNET_HashCode *previous) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_MERGE); + + if (!message) + return NULL; + + GNUNET_memcpy(&(message->body.merge.previous), previous, sizeof(struct GNUNET_HashCode)); + + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_request (const struct GNUNET_HashCode *hash) +{ + struct GNUNET_HashCode zero; + memset (&zero, 0, sizeof(zero)); + + if (0 == GNUNET_CRYPTO_hash_cmp (hash, &zero)) + return NULL; + + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_REQUEST); + + if (!message) + return NULL; + + GNUNET_memcpy(&(message->body.request.hash), hash, sizeof(struct GNUNET_HashCode)); + + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_invite (const struct GNUNET_PeerIdentity *door, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_INVITE); + + if (!message) + return NULL; + + GNUNET_memcpy(&(message->body.invite.door), door, sizeof(struct GNUNET_PeerIdentity)); + GNUNET_memcpy(&(message->body.invite.key), key, sizeof(struct GNUNET_HashCode)); + + return message; +} + +struct GNUNET_MESSENGER_Message* +create_message_text (const char *text) +{ + struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_TEXT); + + if (!message) + return NULL; + + message->body.text.text = GNUNET_strdup(text); + return message; +} diff --git a/src/messenger/gnunet-service-messenger_message_kind.h b/src/messenger/gnunet-service-messenger_message_kind.h new file mode 100644 index 000000000..dd89d0b2f --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_kind.h @@ -0,0 +1,160 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_kind.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H +#define GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H + +#include "platform.h" +#include "gnunet_container_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" + +#include "messenger_api_message.h" +#include "gnunet-service-messenger_service.h" +#include "messenger_api_ego.h" + +/** + * Creates and allocates a new info message containing the hosts public key and a newly generated unique member id. + * (all values are stored as copy) + * + * @param ego EGO of the host + * @param members Map of all assigned member ids + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_info (struct GNUNET_MESSENGER_Ego *ego, struct GNUNET_CONTAINER_MultiShortmap *members); + +/** + * Creates and allocates a new join message containing the clients public key. + * (all values are stored as copy) + * + * @param ego EGO of the client + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_join (struct GNUNET_MESSENGER_Ego *ego); + +/** + * Creates and allocates a new leave message. + * + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_leave (); + +/** + * Creates and allocates a new name message containing the name to change to. + * (all values are stored as copy) + * + * @param name New name + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_name (const char *name); + +/** + * Creates and allocates a new key message containing the public key to change to derived + * from its private counterpart. (all values are stored as copy) + * + * @param key Private key of EGO + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_key (const struct GNUNET_IDENTITY_PrivateKey *key); + +/** + * Creates and allocates a new peer message containing a services peer identity. + * (all values are stored as copy) + * + * @param service Service + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_peer (const struct GNUNET_MESSENGER_Service *service); + +/** + * Creates and allocates a new id message containing the unique member id to change to. + * (all values are stored as copy) + * + * @param unique_id Unique member id + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_id (const struct GNUNET_ShortHashCode *unique_id); + +/** + * Creates and allocates a new miss message containing the missing peer identity. + * (all values are stored as copy) + * + * @param peer Missing peer identity + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_miss (const struct GNUNET_PeerIdentity *peer); + +/** + * Creates and allocates a new merge message containing the hash of a second previous message + * besides the regular previous message mentioned in a messages header. + * (all values are stored as copy) + * + * @param previous Hash of message + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_merge (const struct GNUNET_HashCode *previous); + +/** + * Creates and allocates a new request message containing the hash of a missing message. + * (all values are stored as copy) + * + * @param hash Hash of message + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_request (const struct GNUNET_HashCode *hash); + +/** + * Creates and allocates a new invite message containing the peer identity of an entrance peer + * to a room using a given key as shared secret for communication. + * (all values are stored as copy) + * + * @param door Peer identity + * @param key Shared secret of a room + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_invite (const struct GNUNET_PeerIdentity *door, const struct GNUNET_HashCode *key); + +/** + * Creates and allocates a new text message containing a string representing text. + * (all values are stored as copy) + * + * @param text Text + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_text (const char *text); + +#endif //GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H diff --git a/src/messenger/gnunet-service-messenger_message_recv.c b/src/messenger/gnunet-service-messenger_message_recv.c new file mode 100644 index 000000000..aa28a36ea --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_recv.c @@ -0,0 +1,204 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_recv.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_message_recv.h" +#include "gnunet-service-messenger_message_handle.h" + +void +recv_message_info (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + int conflict = GNUNET_CONTAINER_multishortmap_contains (room->members, &(message->body.info.unique_id)); + + if (GNUNET_NO == conflict) + { + struct GNUNET_MESSENGER_Message *sync_message = create_message_id (&(message->body.info.unique_id)); + struct GNUNET_HashCode sync_hash; + + send_room_message_ext (room, room->host, sync_message, &sync_hash, tunnel); + destroy_message (sync_message); + + switch_room_member_id (room, get_room_host_id (room), &(message->body.info.unique_id), NULL); + + change_room_host_id (room, &(message->body.info.unique_id)); + } + + if (!tunnel->contact_id) + tunnel->contact_id = GNUNET_new(struct GNUNET_ShortHashCode); + + GNUNET_memcpy(tunnel->contact_id, &(message->header.sender_id), sizeof(struct GNUNET_ShortHashCode)); + + struct GNUNET_ShortHashCode original_id; + + if (GNUNET_YES == conflict) + { + GNUNET_memcpy(&original_id, get_room_host_id (room), sizeof(struct GNUNET_ShortHashCode)); + + change_room_host_id (room, &(message->body.info.unique_id)); + } + + { + struct GNUNET_MESSENGER_Message *join_message = create_message_join (room->host->ego); + struct GNUNET_HashCode join_hash; + + send_tunnel_message (tunnel, room->host, join_message, &join_hash); + destroy_message (join_message); + } + + if ((GNUNET_YES == conflict) && (0 != GNUNET_memcmp(&original_id, get_room_host_id (room)))) + { + struct GNUNET_MESSENGER_Message *sync_message = create_message_id (&original_id); + struct GNUNET_HashCode sync_hash; + + send_tunnel_message (tunnel, room->host, sync_message, &sync_hash); + destroy_message (sync_message); + } +} + +struct GNUNET_MESSENGER_MemberInfoSpread +{ + struct GNUNET_MESSENGER_SrvRoom *room; + struct GNUNET_MESSENGER_SrvTunnel *tunnel; +}; + +static int +iterate_send_member_infos (void *cls, const struct GNUNET_ShortHashCode *key, void *value) +{ + struct GNUNET_MESSENGER_MemberInfo *info = value; + struct GNUNET_MESSENGER_MemberInfoSpread *spread = cls; + + struct GNUNET_MESSENGER_ListMessage *element = info->session_messages.head; + + while (element) + { + const struct GNUNET_MESSENGER_Message *message = get_room_message (spread->room, spread->room->host, + &(element->hash), GNUNET_NO); + + if (message) + forward_tunnel_message (spread->tunnel, message, &(element->hash)); + + element = element->next; + } + + return GNUNET_YES; +} + +void +recv_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + const struct GNUNET_MESSENGER_Message *info_msg = get_room_message (room, room->host, &(message->header.previous), + GNUNET_NO); + + if ((info_msg) && (0 == GNUNET_memcmp(&(info_msg->header.sender_id), get_room_host_id (room))) + && (GNUNET_MESSENGER_KIND_INFO == info_msg->header.kind)) + { + struct GNUNET_MESSENGER_MemberInfoSpread spread; + + spread.room = room; + + if ((tunnel) && (tunnel->contact_id) && (0 == GNUNET_memcmp(tunnel->contact_id, &(message->header.sender_id)))) + spread.tunnel = tunnel; + else + spread.tunnel = find_room_tunnel_to (room, &(message->header.sender_id)); + + if (spread.tunnel) + GNUNET_CONTAINER_multishortmap_iterate (room->member_infos, iterate_send_member_infos, &spread); + } + + handle_message_join (room, tunnel, message, hash); +} + +void +recv_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + handle_message_leave (room, tunnel, message, hash); +} + +void +recv_message_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + handle_message_name (room, tunnel, message, hash); +} + +void +recv_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + handle_message_key (room, tunnel, message, hash); +} + +void +recv_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_PeerIdentity peer; + GNUNET_PEER_resolve (tunnel->peer, &peer); + + if (0 == GNUNET_memcmp(&peer, &(message->body.peer.peer))) + { + if (!tunnel->peer_message) + tunnel->peer_message = GNUNET_new(struct GNUNET_HashCode); + + GNUNET_memcpy(tunnel->peer_message, hash, sizeof(struct GNUNET_HashCode)); + + if (!tunnel->contact_id) + tunnel->contact_id = GNUNET_new(struct GNUNET_ShortHashCode); + + GNUNET_memcpy(tunnel->contact_id, &(message->header.sender_id), sizeof(struct GNUNET_ShortHashCode)); + } + + handle_message_peer (room, tunnel, message, hash); +} + +void +recv_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + if ((tunnel->contact_id) && (0 == GNUNET_memcmp(tunnel->contact_id, &(message->header.sender_id)))) + GNUNET_memcpy(tunnel->contact_id, &(message->body.id.id), sizeof(struct GNUNET_ShortHashCode)); + + handle_message_id (room, tunnel, message, hash); +} + +void +recv_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + handle_message_miss (room, tunnel, message, hash); +} + +void +recv_message_request (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + const struct GNUNET_MESSENGER_Message *msg = get_room_message (room, room->host, &(message->body.request.hash), + GNUNET_NO); + + if (msg) + forward_tunnel_message (tunnel, msg, &(message->body.request.hash)); +} diff --git a/src/messenger/gnunet-service-messenger_message_recv.h b/src/messenger/gnunet-service-messenger_message_recv.h new file mode 100644 index 000000000..245612cb0 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_recv.h @@ -0,0 +1,159 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_recv.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_MESSAGE_RECV_H +#define GNUNET_SERVICE_MESSENGER_MESSAGE_RECV_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" + +#include "gnunet-service-messenger_tunnel.h" +#include "messenger_api_message.h" + +/** + * Handles a received info message to change the current member id to the one generated by + * the host connected to. (all current tunnels will be informed about the id change) + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message INFO-Message + * @param hash Hash of the message + */ +void +recv_message_info (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received join message to forward all member information to the new member if the message was + * the direct reaction to a previous info message from this peer. + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message JOIN-Message + * @param hash Hash of the message + */ +void +recv_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received leave message. + * @see handle_message_leave() + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message LEAVE-Message + * @param hash Hash of the message + */ +void +recv_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received name message. + * @see handle_message_name() + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message NAME-Message + * @param hash Hash of the message + */ +void +recv_message_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received key message. + * @see handle_message_key() + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message KEY-Message + * @param hash Hash of the message + */ +void +recv_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received peer message to link it to its origin tunnel if the peer identity matches. + * (the peer message and the member id can potentially be linked to the tunnel) + * + * TODO: This handling will only check the one given tunnel! + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message PEER-Message + * @param hash Hash of the message + */ +void +recv_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received id message to change the tunnels linked member id if necessary. + * (the tunnels linked member id will be changed if the sender id is matching) + * + * TODO: This handling will only check the one given tunnel! + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message ID-Message + * @param hash Hash of the message + */ +void +recv_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received miss message. + * @see handle_message_miss() + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message MISS-Message + * @param hash Hash of the message + */ +void +recv_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Handles a received request message by checking for the requested message and forwarding it back + * if the message was found. + * (this can also cause this peer to send a new request instead of only forwarding the received one) + * + * TODO: Requests can cause exponentially more requests! + * + * @param room Room of the message + * @param tunnel Receiving connection + * @param message REQUEST-Message + * @param hash Hash of the message + */ +void +recv_message_request (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +#endif //GNUNET_SERVICE_MESSENGER_MESSAGE_RECV_H diff --git a/src/messenger/gnunet-service-messenger_message_send.c b/src/messenger/gnunet-service-messenger_message_send.c new file mode 100644 index 000000000..86cf9b888 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_send.c @@ -0,0 +1,118 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_send.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_message_send.h" +#include "gnunet-service-messenger_message_handle.h" + +void +send_message_info (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + if (!tunnel->contact_id) + { + tunnel->contact_id = GNUNET_new(struct GNUNET_ShortHashCode); + + GNUNET_memcpy(tunnel->contact_id, &(message->body.info.unique_id), sizeof(struct GNUNET_ShortHashCode)); + } + else + { + disconnect_tunnel (tunnel); + } +} + +void +send_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + handle_message_join (room, tunnel, message, hash); + + if (room->peer_message) + { + const struct GNUNET_MESSENGER_Message *peer_message = get_room_message (room, handle, room->peer_message, + GNUNET_NO); + + if ((peer_message) && (tunnel)) + { + forward_tunnel_message (tunnel, peer_message, room->peer_message); + } + } +} + +void +send_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + handle_message_leave (room, tunnel, message, hash); +} + +void +send_message_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + handle_message_name (room, tunnel, message, hash); +} + +void +send_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + handle_message_key (room, tunnel, message, hash); +} + +void +send_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + if (!room->peer_message) + { + room->peer_message = GNUNET_new(struct GNUNET_HashCode); + } + + GNUNET_memcpy(room->peer_message, hash, sizeof(struct GNUNET_HashCode)); + + handle_message_peer (room, tunnel, message, hash); +} + +void +send_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + handle_message_id (room, tunnel, message, hash); +} + +void +send_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + handle_message_miss (room, tunnel, message, hash); +} diff --git a/src/messenger/gnunet-service-messenger_message_send.h b/src/messenger/gnunet-service-messenger_message_send.h new file mode 100644 index 000000000..c1096205a --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_send.h @@ -0,0 +1,155 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_send.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_MESSAGE_SEND_H +#define GNUNET_SERVICE_MESSENGER_MESSAGE_SEND_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" + +#include "gnunet-service-messenger_tunnel.h" +#include "messenger_api_message.h" + +/** + * Handles a sent info message to setup a tunnels linked member id. + * (if a tunnel has already got a member id linked to it, the connection will be closed) + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message INFO-Message + * @param hash Hash of the message + */ +void +send_message_info (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Handles a sent join message to ensure growth of the decentralized room structure. + * (if the service provides a peer message for this room currently, it will be forwarded) + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message JOIN-Message + * @param hash Hash of the message + */ +void +send_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Handles a sent leave message. + * @see handle_message_leave() + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message LEAVE-Message + * @param hash Hash of the message + */ +void +send_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Handles a sent name message. + * @see handle_message_name() + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message NAME-Message + * @param hash Hash of the message + */ +void +send_message_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Handles a sent key message. + * @see handle_message_key() + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message KEY-Message + * @param hash Hash of the message + */ +void +send_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Handles a sent peer message to update the rooms peer message of this service. + * (a set peer message indicates this service being a part of the decentralized room structure) + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message PEER-Message + * @param hash Hash of the message + */ +void +send_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Handles a sent id message. + * @see handle_message_id() + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message ID-Message + * @param hash Hash of the message + */ +void +send_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Handles a sent miss message. + * @see handle_message_miss() + * + * @param room Room of the message + * @param handle Sending handle + * @param tunnel Sending connection (may be NULL) + * @param message MISS-Message + * @param hash Hash of the message + */ +void +send_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +#endif //GNUNET_SERVICE_MESSENGER_MESSAGE_SEND_H diff --git a/src/messenger/gnunet-service-messenger_message_store.c b/src/messenger/gnunet-service-messenger_message_store.c new file mode 100644 index 000000000..5933d6390 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_store.c @@ -0,0 +1,282 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_store.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_message_store.h" +#include "messenger_api_message.h" + +void +init_message_store (struct GNUNET_MESSENGER_MessageStore *store) +{ + store->storage_messages = NULL; + + store->entries = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + store->messages = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); +} + +static int +iterate_destroy_entries (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_MessageEntry *entry = value; + + GNUNET_free(entry); + + return GNUNET_YES; +} + +static int +iterate_destroy_messages (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_Message *message = value; + + destroy_message (message); + + return GNUNET_YES; +} + +void +clear_message_store (struct GNUNET_MESSENGER_MessageStore *store) +{ + if (store->storage_messages) + { + GNUNET_DISK_file_close (store->storage_messages); + + store->storage_messages = NULL; + } + + GNUNET_CONTAINER_multihashmap_iterate (store->entries, iterate_destroy_entries, NULL); + GNUNET_CONTAINER_multihashmap_iterate (store->messages, iterate_destroy_messages, NULL); + + GNUNET_CONTAINER_multihashmap_destroy (store->entries); + GNUNET_CONTAINER_multihashmap_destroy (store->messages); +} + +struct GNUNET_MESSENGER_MessageEntryStorage +{ + struct GNUNET_HashCode hash; + struct GNUNET_MESSENGER_MessageEntry entry; +}; + +void +load_message_store (struct GNUNET_MESSENGER_MessageStore *store, const char *directory) +{ + enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); + + if (store->storage_messages) + GNUNET_DISK_file_close (store->storage_messages); + + char *filename; + GNUNET_asprintf (&filename, "%s%s", directory, "messages.store"); + + if (GNUNET_YES == GNUNET_DISK_file_test (filename)) + store->storage_messages = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, permission); + else + store->storage_messages = NULL; + + GNUNET_free(filename); + + if (!store->storage_messages) + return; + + GNUNET_asprintf (&filename, "%s%s", directory, "entries.store"); + + if (GNUNET_YES != GNUNET_DISK_file_test (filename)) + goto free_filename; + + struct GNUNET_DISK_FileHandle *entries = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, permission); + + if (!entries) + goto free_filename; + + struct GNUNET_MESSENGER_MessageEntryStorage storage; + struct GNUNET_MESSENGER_MessageEntry *entry; + + do + { + entry = GNUNET_new(struct GNUNET_MESSENGER_MessageEntry); + + if (GNUNET_DISK_file_read (entries, &storage, sizeof(storage)) == sizeof(storage)) + { + GNUNET_memcpy(entry, &(storage.entry), sizeof(*entry)); + + if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (store->entries, &(storage.hash), entry, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + GNUNET_free(entry); + } + else + { + GNUNET_free(entry); + + entry = NULL; + } + } + while (entry); + + GNUNET_DISK_file_close (entries); + +free_filename: + GNUNET_free(filename); +} + +struct GNUNET_MESSENGER_MessageSave +{ + struct GNUNET_MESSENGER_MessageStore *store; + + struct GNUNET_DISK_FileHandle *storage_entries; +}; + +static int +iterate_save_messages (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_MessageSave *save = cls; + + if (GNUNET_NO != GNUNET_CONTAINER_multihashmap_contains (save->store->entries, key)) + return GNUNET_YES; + + struct GNUNET_MESSENGER_Message *message = value; + struct GNUNET_MESSENGER_MessageEntryStorage storage; + + GNUNET_memcpy(&(storage.hash), key, sizeof(storage.hash)); + + storage.entry.length = get_message_size (message); + storage.entry.offset = GNUNET_DISK_file_seek (save->store->storage_messages, 0, GNUNET_DISK_SEEK_END); + + if ((GNUNET_SYSERR == storage.entry.offset) || + (sizeof(storage) != GNUNET_DISK_file_write (save->storage_entries, &storage, sizeof(storage)))) + return GNUNET_YES; + + char *buffer = GNUNET_malloc(storage.entry.length); + + encode_message (message, storage.entry.length, buffer); + + GNUNET_DISK_file_write (save->store->storage_messages, buffer, storage.entry.length); + + GNUNET_free(buffer); + + return GNUNET_YES; +} + +void +save_message_store (struct GNUNET_MESSENGER_MessageStore *store, const char *directory) +{ + struct GNUNET_MESSENGER_MessageSave save; + + enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); + + char *filename; + GNUNET_asprintf (&filename, "%s%s", directory, "entries.store"); + + save.store = store; + save.storage_entries = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE, permission); + + GNUNET_free(filename); + + if (!save.storage_entries) + return; + + if (GNUNET_SYSERR == GNUNET_DISK_file_seek (save.storage_entries, 0, GNUNET_DISK_SEEK_END)) + goto close_entries; + + if (store->storage_messages) + GNUNET_DISK_file_close (store->storage_messages); + + GNUNET_asprintf (&filename, "%s%s", directory, "messages.store"); + + store->storage_messages = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READWRITE | GNUNET_DISK_OPEN_CREATE, + permission); + + GNUNET_free(filename); + + if (store->storage_messages) + { + GNUNET_CONTAINER_multihashmap_iterate (store->messages, iterate_save_messages, &save); + + GNUNET_DISK_file_sync (store->storage_messages); + GNUNET_DISK_file_sync (save.storage_entries); + } + +close_entries: + GNUNET_DISK_file_close (save.storage_entries); +} + +int +contains_store_message (struct GNUNET_MESSENGER_MessageStore *store, const struct GNUNET_HashCode *hash) +{ + if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (store->messages, hash)) + return GNUNET_YES; + + return GNUNET_CONTAINER_multihashmap_contains (store->entries, hash); +} + +const struct GNUNET_MESSENGER_Message* +get_store_message (struct GNUNET_MESSENGER_MessageStore *store, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_Message *message = GNUNET_CONTAINER_multihashmap_get (store->messages, hash); + + if (message) + return message; + + if (!store->storage_messages) + return NULL; + + const struct GNUNET_MESSENGER_MessageEntry *entry = GNUNET_CONTAINER_multihashmap_get (store->entries, hash); + + if (!entry) + return NULL; + + if (entry->offset != GNUNET_DISK_file_seek (store->storage_messages, entry->offset, GNUNET_DISK_SEEK_SET)) + return message; + + char *buffer = GNUNET_malloc(entry->length); + + if (GNUNET_DISK_file_read (store->storage_messages, buffer, entry->length) != entry->length) + goto free_buffer; + + + message = create_message (GNUNET_MESSENGER_KIND_UNKNOWN); + + if ((GNUNET_YES != decode_message (message, entry->length, buffer)) || (GNUNET_OK + != GNUNET_CONTAINER_multihashmap_put (store->messages, hash, message, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))) + { + destroy_message (message); + + message = NULL; + + GNUNET_CONTAINER_multihashmap_remove (store->entries, hash, entry); + } + +free_buffer: + GNUNET_free(buffer); + + return message; +} + +int +put_store_message (struct GNUNET_MESSENGER_MessageStore *store, const struct GNUNET_HashCode *hash, + struct GNUNET_MESSENGER_Message *message) +{ + return GNUNET_CONTAINER_multihashmap_put (store->messages, hash, message, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); +} diff --git a/src/messenger/gnunet-service-messenger_message_store.h b/src/messenger/gnunet-service-messenger_message_store.h new file mode 100644 index 000000000..e58459b21 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_message_store.h @@ -0,0 +1,120 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_message_store.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_MESSAGE_STORE_H +#define GNUNET_SERVICE_MESSENGER_MESSAGE_STORE_H + +#include "platform.h" +#include "gnunet_container_lib.h" +#include "gnunet_disk_lib.h" + +struct GNUNET_MESSENGER_MessageEntry +{ + off_t offset; + uint16_t length; +}; + +struct GNUNET_MESSENGER_MessageStore +{ + struct GNUNET_DISK_FileHandle *storage_messages; + + struct GNUNET_CONTAINER_MultiHashMap *entries; + struct GNUNET_CONTAINER_MultiHashMap *messages; +}; + +/** + * Initializes a message store as fully empty. + * + * @param store Message store + */ +void +init_message_store (struct GNUNET_MESSENGER_MessageStore *store); + +/** + * Clears a message store, wipes its content and deallocates its memory. + * + * @param store Message store + */ +void +clear_message_store (struct GNUNET_MESSENGER_MessageStore *store); + +/** + * Loads messages from a directory into a message store. + * + * @param store Message store + * @param directory Path to a directory + */ +void +load_message_store (struct GNUNET_MESSENGER_MessageStore *store, const char *directory); + +/** + * Saves messages from a message store into a directory. + * + * @param store Message store + * @param directory Path to a directory + */ +void +save_message_store (struct GNUNET_MESSENGER_MessageStore *store, const char *directory); + +/** + * Checks if a message matching a given hash is stored in a message store. The function returns + * GNUNET_YES if a match is found, GNUNET_NO otherwise. + * + * The message has not to be loaded from disk into memory for this check! + * + * @param store Message store + * @param hash Hash of message + * @return GNUNET_YES on match, otherwise GNUNET_NO + */ +int +contains_store_message (struct GNUNET_MESSENGER_MessageStore *store, const struct GNUNET_HashCode *hash); + +/** + * Returns the message from a message store matching a given hash. If no matching message is found, + * NULL gets returned. + * + * This function requires the message to be loaded into memory! + * @see contains_store_message() + * + * @param store Message store + * @param hash Hash of message + * @return Message or NULL + */ +const struct GNUNET_MESSENGER_Message* +get_store_message (struct GNUNET_MESSENGER_MessageStore *store, const struct GNUNET_HashCode *hash); + +/** + * Stores a message into the message store. The result indicates if the operation was successful. + * + * @param store Message store + * @param hash Hash of message + * @param message Message + * @return GNUNET_OK on success, otherwise GNUNET_NO + */ +int +put_store_message (struct GNUNET_MESSENGER_MessageStore *store, const struct GNUNET_HashCode *hash, + struct GNUNET_MESSENGER_Message *message); + +#endif //GNUNET_SERVICE_MESSENGER_MESSAGE_STORE_H diff --git a/src/messenger/gnunet-service-messenger_room.c b/src/messenger/gnunet-service-messenger_room.c new file mode 100644 index 000000000..7383e1d20 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_room.c @@ -0,0 +1,1051 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_room.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_room.h" + +#include "gnunet-service-messenger_message_kind.h" + +#include "gnunet-service-messenger_service.h" +#include "gnunet-service-messenger_util.h" + +static void +idle_request_room_messages (void *cls); + +struct GNUNET_MESSENGER_SrvRoom* +create_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key) +{ + GNUNET_assert((handle) && (key)); + + struct GNUNET_MESSENGER_SrvRoom *room = GNUNET_new(struct GNUNET_MESSENGER_SrvRoom); + + room->service = handle->service; + room->host = handle; + room->port = NULL; + + GNUNET_memcpy(&(room->key), key, sizeof(struct GNUNET_HashCode)); + + room->tunnels = GNUNET_CONTAINER_multipeermap_create (8, GNUNET_NO); + room->members = GNUNET_CONTAINER_multishortmap_create (8, GNUNET_NO); + room->member_infos = GNUNET_CONTAINER_multishortmap_create (8, GNUNET_NO); + + init_message_store (&(room->store)); + room->requested = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + + init_list_tunnels (&(room->basement)); + init_list_messages (&(room->last_messages)); + + room->peer_message = NULL; + + init_list_messages (&(room->handling)); + room->idle = NULL; + + room->strict_access = GNUNET_NO; + + if (room->service->dir) + load_service_room_and_messages (room->service, room); + + room->idle = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, idle_request_room_messages, room); + + return room; +} + +static int +iterate_destroy_tunnels (void *cls, const struct GNUNET_PeerIdentity *key, void *value) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = value; + destroy_tunnel (tunnel); + return GNUNET_YES; +} + +static int +iterate_clear_members (void *cls, const struct GNUNET_ShortHashCode *key, void *value) +{ + struct GNUNET_MESSENGER_SrvContact *contact = value; + + if (GNUNET_YES == decrease_contact_rc (contact)) + { + struct GNUNET_MESSENGER_SrvRoom *room = cls; + + const struct GNUNET_HashCode *id = get_contact_id_from_key (contact); + + if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (room->service->contacts, id, contact)) + destroy_contact (contact); + } + + return GNUNET_YES; +} + +static int +iterate_destroy_member_infos (void *cls, const struct GNUNET_ShortHashCode *key, void *value) +{ + struct GNUNET_MESSENGER_MemberInfo *info = value; + + clear_list_messages (&(info->session_messages)); + + GNUNET_free(info); + return GNUNET_YES; +} + +void +destroy_room (struct GNUNET_MESSENGER_SrvRoom *room) +{ + GNUNET_assert(room); + + if (room->idle) + { + GNUNET_SCHEDULER_cancel (room->idle); + + room->idle = NULL; + } + + if (room->port) + GNUNET_CADET_close_port (room->port); + + merge_room_last_messages (room, room->host); + + GNUNET_CONTAINER_multipeermap_iterate (room->tunnels, iterate_destroy_tunnels, + NULL); + + handle_room_messages (room); + + if (room->service->dir) + save_service_room_and_messages (room->service, room); + + GNUNET_CONTAINER_multishortmap_iterate (room->members, iterate_clear_members, room); + GNUNET_CONTAINER_multishortmap_iterate (room->member_infos, iterate_destroy_member_infos, NULL); + + clear_message_store (&(room->store)); + + GNUNET_CONTAINER_multihashmap_destroy (room->requested); + + GNUNET_CONTAINER_multipeermap_destroy (room->tunnels); + GNUNET_CONTAINER_multishortmap_destroy (room->members); + GNUNET_CONTAINER_multishortmap_destroy (room->member_infos); + + clear_list_tunnels (&(room->basement)); + clear_list_messages (&(room->last_messages)); + + if (room->peer_message) + GNUNET_free(room->peer_message); + + GNUNET_free(room); +} + +struct GNUNET_MESSENGER_SrvContact* +get_room_contact (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *id) +{ + GNUNET_assert((room) && (room->members)); + + return GNUNET_CONTAINER_multishortmap_get (room->members, id); +} + +void +add_room_contact (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *id, + const struct GNUNET_IDENTITY_PublicKey *pubkey) +{ + struct GNUNET_MESSENGER_SrvContact *contact = get_service_contact_by_pubkey (room->service, pubkey); + + if (GNUNET_OK == GNUNET_CONTAINER_multishortmap_put (room->members, id, contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + increase_contact_rc (contact); +} + +struct GNUNET_MESSENGER_MemberInfo* +get_room_member_info (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *id) +{ + GNUNET_assert((room) && (room->member_infos)); + + return GNUNET_CONTAINER_multishortmap_get (room->member_infos, id); +} + +struct GNUNET_ShortHashCode* +generate_room_member_id (const struct GNUNET_MESSENGER_SrvRoom *room) +{ + struct GNUNET_ShortHashCode *unique_id = GNUNET_new(struct GNUNET_ShortHashCode); + + GNUNET_assert(room); + + if (GNUNET_YES == generate_free_member_id (unique_id, room->members)) + return unique_id; + else + { + GNUNET_free(unique_id); + return NULL; + } +} + +const struct GNUNET_ShortHashCode* +get_room_host_id (const struct GNUNET_MESSENGER_SrvRoom *room) +{ + GNUNET_assert(room); + + return get_handle_member_id (room->host, &(room->key)); +} + +void +change_room_host_id (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *unique_id) +{ + GNUNET_assert(room); + + change_handle_member_id (room->host, &(room->key), unique_id); +} + +static int +send_room_info (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_SrvTunnel *tunnel) +{ + if (!handle) + return GNUNET_NO; + + merge_room_last_messages (room, handle); + + if (!is_tunnel_connected (tunnel)) + return GNUNET_NO; + + struct GNUNET_MESSENGER_Message *message = create_message_info (get_handle_ego(handle), room->members); + + if (!message) + return GNUNET_NO; + + if ((tunnel->peer_message) && (tunnel->contact_id)) + { + GNUNET_memcpy(&(message->body.info.unique_id), &(tunnel->contact_id), sizeof(struct GNUNET_ShortHashCode)); + GNUNET_free(tunnel->contact_id); + + tunnel->contact_id = NULL; + } + + struct GNUNET_HashCode hash; + + send_tunnel_message (tunnel, handle, message, &hash); + destroy_message (message); + + if (tunnel->contact_id) + { + GNUNET_free(tunnel->contact_id); + + tunnel->contact_id = NULL; + } + + return GNUNET_YES; +} + +static void* +callback_room_connect (void *cls, struct GNUNET_CADET_Channel *channel, const struct GNUNET_PeerIdentity *source) +{ + struct GNUNET_MESSENGER_SrvRoom *room = cls; + + struct GNUNET_MESSENGER_SrvTunnel *tunnel = GNUNET_CONTAINER_multipeermap_get (room->tunnels, source); + + if (tunnel) + { + if (GNUNET_YES == bind_tunnel (tunnel, channel)) + { + if (GNUNET_YES == send_room_info (room, room->host, tunnel)) + return tunnel; + else + { + disconnect_tunnel (tunnel); + return NULL; + } + } + else + { + delayed_disconnect_channel (channel); + return NULL; + } + } + else + { + tunnel = create_tunnel (room, source); + + if ((GNUNET_YES == bind_tunnel (tunnel, channel)) && (GNUNET_OK + == GNUNET_CONTAINER_multipeermap_put (room->tunnels, source, tunnel, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))) + { + if (GNUNET_YES == send_room_info (room, room->host, tunnel)) + return tunnel; + else + { + GNUNET_CONTAINER_multipeermap_remove (room->tunnels, source, tunnel); + + disconnect_tunnel (tunnel); + destroy_tunnel (tunnel); + return NULL; + } + } + else + { + tunnel->channel = NULL; + destroy_tunnel (tunnel); + + delayed_disconnect_channel (channel); + return NULL; + } + } +} + +static int +join_room (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_ShortHashCode *member_id) +{ + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Joining room: %s (%s)\n", GNUNET_h2s(get_room_key(room)), GNUNET_sh2s(member_id)); + + struct GNUNET_MESSENGER_Message *message = create_message_join (get_handle_ego(handle)); + + if (!message) + { + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Your join message could not be created!\n"); + + return GNUNET_NO; + } + + struct GNUNET_HashCode hash; + + send_room_message (room, handle, message, &hash); + destroy_message (message); + + struct GNUNET_MESSENGER_MemberInfo *info = GNUNET_new(struct GNUNET_MESSENGER_MemberInfo); + + info->access = GNUNET_MESSENGER_MEMBER_ALLOWED; + init_list_messages (&(info->session_messages)); + + if (GNUNET_YES == GNUNET_CONTAINER_multishortmap_put (room->member_infos, member_id, info, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + { + change_handle_member_id (handle, &(room->key), member_id); + + add_to_list_messages (&(info->session_messages), &hash); + return GNUNET_YES; + } + else + { + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Your member information could not be registered!\n"); + + GNUNET_free(info); + return GNUNET_NO; + } +} + +static int +join_room_locally (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle) +{ + const struct GNUNET_ShortHashCode *member_id = get_handle_member_id (handle, &(room->key)); + + struct GNUNET_MESSENGER_MemberInfo *info = GNUNET_CONTAINER_multishortmap_get (room->member_infos, member_id); + + if ((!info) && (GNUNET_NO == join_room (room, handle, member_id))) + return GNUNET_NO; + + return GNUNET_YES; +} + +extern int +check_tunnel_message (void *cls, const struct GNUNET_MessageHeader *header); +extern void +handle_tunnel_message (void *cls, const struct GNUNET_MessageHeader *header); + +extern void +callback_tunnel_disconnect (void *cls, const struct GNUNET_CADET_Channel *channel); + +int +open_room (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle) +{ + if (room->port) + return join_room_locally (room, handle); + + struct GNUNET_CADET_Handle *cadet = get_room_cadet (room); + struct GNUNET_HashCode *key = get_room_key (room); + + struct GNUNET_MQ_MessageHandler handlers[] = { GNUNET_MQ_hd_var_size(tunnel_message, GNUNET_MESSAGE_TYPE_CADET_CLI, + struct GNUNET_MessageHeader, NULL), + GNUNET_MQ_handler_end() }; + + room->port = GNUNET_CADET_open_port (cadet, key, callback_room_connect, room, NULL, + callback_tunnel_disconnect, handlers); + + const struct GNUNET_ShortHashCode *member_id = get_handle_member_id (handle, &(room->key)); + + struct GNUNET_MESSENGER_MemberInfo *info = GNUNET_CONTAINER_multishortmap_get (room->member_infos, member_id); + + if ((!info) && (GNUNET_NO == join_room (room, handle, member_id)) && (room->port)) + { + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "You could not join the room, therefore it keeps closed!\n"); + + GNUNET_CADET_close_port (room->port); + room->port = NULL; + + return GNUNET_NO; + } + + struct GNUNET_MESSENGER_Message *message = create_message_peer (room->service); + + if (message) + { + struct GNUNET_HashCode hash; + + send_room_message (room, handle, message, &hash); + destroy_message (message); + } + + return (room->port ? GNUNET_YES : GNUNET_NO); +} + +int +entry_room_at (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_PeerIdentity *door) +{ + if (room->peer_message) + { + const struct GNUNET_MESSENGER_Message *msg = get_room_message (room, handle, room->peer_message, GNUNET_NO); + + if (0 == GNUNET_memcmp(&(msg->body.peer.peer), door)) + return join_room_locally (room, handle); + } + + struct GNUNET_MESSENGER_SrvTunnel *tunnel = GNUNET_CONTAINER_multipeermap_get (room->tunnels, door); + + if (tunnel) + { + switch (connect_tunnel (tunnel)) + { + case GNUNET_YES: + return GNUNET_YES; + case GNUNET_NO: + return join_room_locally (room, handle); + default: + return GNUNET_NO; + } + } + + tunnel = create_tunnel (room, door); + + if ((GNUNET_YES == connect_tunnel (tunnel)) && + (GNUNET_OK == GNUNET_CONTAINER_multipeermap_put (room->tunnels, door, tunnel, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))) + return GNUNET_YES; + else + { + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "You could not connect to that door!\n"); + + destroy_tunnel (tunnel); + return GNUNET_NO; + } +} + +struct GNUNET_MESSENGER_SrvTunnelFinder +{ + const struct GNUNET_ShortHashCode *needle; + struct GNUNET_MESSENGER_SrvTunnel *tunnel; +}; + +static int +iterate_find_tunnel (void *cls, const struct GNUNET_PeerIdentity *peer, void *value) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = value; + struct GNUNET_MESSENGER_SrvTunnelFinder *finder = cls; + + if ((tunnel->contact_id) && (0 == GNUNET_memcmp(tunnel->contact_id, finder->needle))) + { + finder->tunnel = tunnel; + return GNUNET_NO; + } + + return GNUNET_YES; +} + +struct GNUNET_MESSENGER_SrvTunnel* +find_room_tunnel_to (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *contact_id) +{ + struct GNUNET_MESSENGER_SrvTunnelFinder finder; + + finder.needle = contact_id; + finder.tunnel = NULL; + + GNUNET_CONTAINER_multipeermap_iterate (room->tunnels, iterate_find_tunnel, &finder); + + return finder.tunnel; +} + +struct GNUNET_MQ_Envelope* +pack_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, int mode) +{ + message->header.timestamp = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_get ()); + + const struct GNUNET_ShortHashCode *id = get_handle_member_id (handle, &(room->key)); + + GNUNET_assert(id); + + GNUNET_memcpy(&(message->header.sender_id), id, sizeof(struct GNUNET_ShortHashCode)); + + if (room->last_messages.head) + GNUNET_memcpy(&(message->header.previous), &(room->last_messages.head->hash), sizeof(struct GNUNET_HashCode)); + else + memset (&(message->header.previous), 0, sizeof(struct GNUNET_HashCode)); + + return pack_message (message, hash, get_handle_ego (handle), mode); +} + +struct GNUNET_MESSENGER_ClosureSendRoom +{ + struct GNUNET_MESSENGER_SrvRoom *room; + struct GNUNET_MESSENGER_SrvHandle *handle; + struct GNUNET_MESSENGER_SrvTunnel *exclude; + struct GNUNET_MESSENGER_Message *message; + struct GNUNET_HashCode *hash; + int packed; +}; + +static int +iterate_send_room_message (void *cls, const struct GNUNET_PeerIdentity *key, void *value) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = value; + + if ((!is_tunnel_connected (tunnel)) || (!tunnel->contact_id)) + return GNUNET_YES; + + struct GNUNET_MESSENGER_ClosureSendRoom *closure = cls; + + if (tunnel == closure->exclude) + return GNUNET_YES; + + struct GNUNET_MQ_Envelope *env = NULL; + + if (closure->packed == GNUNET_NO) + { + env = pack_room_message (closure->room, closure->handle, closure->message, closure->hash, + GNUNET_MESSENGER_PACK_MODE_ENVELOPE); + + if (env) + { + closure->message = copy_message (closure->message); + closure->packed = GNUNET_YES; + } + } + else + { + env = pack_message (closure->message, NULL, NULL, + GNUNET_MESSENGER_PACK_MODE_ENVELOPE); + } + + if (env) + send_tunnel_envelope (tunnel, closure->handle, env, closure->message, closure->hash); + + return GNUNET_YES; +} + +void +callback_room_sent (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, void *cls, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +void +send_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_ClosureSendRoom closure; + + closure.room = room; + closure.handle = handle; + closure.exclude = NULL; + closure.message = message; + closure.hash = hash; + closure.packed = GNUNET_NO; + + GNUNET_CONTAINER_multipeermap_iterate (room->tunnels, iterate_send_room_message, &closure); + + if ((GNUNET_NO == closure.packed) && (closure.message == message)) + { + pack_room_message (room, handle, message, hash, + GNUNET_MESSENGER_PACK_MODE_UNKNOWN); + + callback_room_sent (room, handle, NULL, copy_message (message), hash); + } +} + +void +send_room_message_ext (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, + struct GNUNET_MESSENGER_SrvTunnel *tunnel) +{ + struct GNUNET_MESSENGER_ClosureSendRoom closure; + + closure.room = room; + closure.handle = handle; + closure.exclude = tunnel; + closure.message = message; + closure.hash = hash; + closure.packed = GNUNET_NO; + + GNUNET_CONTAINER_multipeermap_iterate (room->tunnels, iterate_send_room_message, &closure); + + if ((GNUNET_NO == closure.packed) && (closure.message == message)) + { + pack_room_message (room, handle, message, hash, + GNUNET_MESSENGER_PACK_MODE_UNKNOWN); + + callback_room_sent (room, handle, NULL, copy_message (message), hash); + } +} + +void +forward_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_ClosureSendRoom closure; + struct GNUNET_HashCode message_hash; + + GNUNET_memcpy(&message_hash, hash, sizeof(struct GNUNET_HashCode)); + + closure.room = room; + closure.handle = NULL; + closure.exclude = tunnel; + closure.message = copy_message (message); + closure.hash = &message_hash; + closure.packed = GNUNET_YES; + + GNUNET_CONTAINER_multipeermap_iterate (room->tunnels, iterate_send_room_message, &closure); +} + +void +merge_room_last_messages (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle) +{ + if (!handle) + return; + + if (!room->last_messages.head) + return; + + while (room->last_messages.head != room->last_messages.tail) + { + struct GNUNET_MESSENGER_ListMessage *element = room->last_messages.tail; + + struct GNUNET_MESSENGER_Message *message = create_message_merge (&(element->hash)); + + if (message) + { + struct GNUNET_HashCode hash; + + send_room_message (room, handle, message, &hash); + destroy_message (message); + } + + if (element->prev) + GNUNET_CONTAINER_DLL_remove(room->last_messages.head, room->last_messages.tail, element); + } +} + +struct GNUNET_CADET_Handle* +get_room_cadet (struct GNUNET_MESSENGER_SrvRoom *room) +{ + return room->service->cadet; +} + +struct GNUNET_HashCode* +get_room_key (struct GNUNET_MESSENGER_SrvRoom *room) +{ + return &(room->key); +} + +const struct GNUNET_MESSENGER_SrvTunnel* +get_room_tunnel (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_PeerIdentity *peer) +{ + return GNUNET_CONTAINER_multipeermap_get (room->tunnels, peer); +} + +const struct GNUNET_MESSENGER_Message* +get_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_HashCode *hash, int request) +{ + const struct GNUNET_MESSENGER_Message *message = get_store_message (&(room->store), hash); + + if ((message) || (!handle) || (GNUNET_YES != request) + || (GNUNET_NO != GNUNET_CONTAINER_multihashmap_contains (room->requested, hash))) + return message; + + struct GNUNET_MESSENGER_Message *request_msg = create_message_request (hash); + + if (request_msg) + { + if (GNUNET_CONTAINER_multihashmap_put (room->requested, hash, NULL, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST) == GNUNET_OK) + { + struct GNUNET_HashCode request_hash; + + send_room_message (room, handle, request_msg, &request_hash); + } + + destroy_message (request_msg); + } + + return message; +} + +void +callback_room_disconnect (struct GNUNET_MESSENGER_SrvRoom *room, void *cls) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls; + + if (!room->host) + return; + + struct GNUNET_PeerIdentity identity; + + GNUNET_PEER_resolve (tunnel->peer, &identity); + + if (GNUNET_YES == contains_list_tunnels (&(room->basement), &identity)) + { + struct GNUNET_MESSENGER_Message *message = create_message_miss (&identity); + + if (message) + { + struct GNUNET_HashCode hash; + + send_room_message (room, room->host, message, &hash); + destroy_message (message); + } + } +} + +int +callback_verify_room_message (struct GNUNET_MESSENGER_SrvRoom *room, void *cls, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash) +{ + if (GNUNET_MESSENGER_KIND_UNKNOWN == message->header.kind) + return GNUNET_SYSERR; + + struct GNUNET_MESSENGER_SrvContact *contact = GNUNET_CONTAINER_multishortmap_get (room->members, + &(message->header.sender_id)); + + if (!contact) + { + if (GNUNET_MESSENGER_KIND_INFO == message->header.kind) + contact = get_service_contact_by_pubkey (room->service, &(message->body.info.host_key)); + else if (GNUNET_MESSENGER_KIND_JOIN == message->header.kind) + contact = get_service_contact_by_pubkey (room->service, &(message->body.join.key)); + } + + if ((!contact) || (GNUNET_SYSERR == verify_message (message, hash, get_contact_key (contact)))) + return GNUNET_SYSERR; + + if (GNUNET_YES == room->strict_access) + { + struct GNUNET_MESSENGER_MemberInfo *info = GNUNET_CONTAINER_multishortmap_get (room->member_infos, + &(message->header.sender_id)); + + if ((info) && (GNUNET_MESSENGER_MEMBER_BLOCKED == info->access)) + return GNUNET_SYSERR; + } + + if (GNUNET_YES == contains_store_message (&(room->store), hash)) + return GNUNET_NO; + + return GNUNET_YES; +} + +static void +search_room_for_message (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_HashCode *hash) +{ + const struct GNUNET_MESSENGER_Message *message = get_room_message (room, room->host, hash, GNUNET_YES); + + if (!message) + return; + + if (GNUNET_MESSENGER_KIND_MERGE == message->header.kind) + search_room_for_message (room, &(message->body.merge.previous)); + + search_room_for_message (room, &(message->header.previous)); +} + +static void +idle_request_room_messages (void *cls) +{ + struct GNUNET_MESSENGER_SrvRoom *room = cls; + + room->idle = NULL; + + struct GNUNET_MESSENGER_ListMessage *element = room->last_messages.head; + + while (element) + { + search_room_for_message (room, &(element->hash)); + + element = element->next; + } + + merge_room_last_messages (room, room->host); + + room->idle = GNUNET_SCHEDULER_add_delayed_with_priority (GNUNET_TIME_relative_get_second_ (), + GNUNET_SCHEDULER_PRIORITY_IDLE, idle_request_room_messages, + cls); +} + +void +update_room_last_messages (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_ListMessage *element = room->last_messages.head; + struct GNUNET_MESSENGER_ListMessage *merging = NULL; + + if (GNUNET_MESSENGER_KIND_MERGE == message->header.kind) + { + merging = room->last_messages.head; + + while (merging) + { + if (0 == GNUNET_CRYPTO_hash_cmp (&(merging->hash), &(message->body.merge.previous))) + break; + + merging = merging->next; + } + + if (merging) + element = merging->next; + } + + while (element) + { + if (0 == GNUNET_CRYPTO_hash_cmp (&(element->hash), &(message->header.previous))) + break; + + element = element->next; + } + + if ((merging) && (!element)) + { + element = merging; + merging = NULL; + } + + if (element) + { + GNUNET_memcpy(&(element->hash), hash, sizeof(struct GNUNET_HashCode)); + + if (merging) + GNUNET_CONTAINER_DLL_remove(room->last_messages.head, room->last_messages.tail, merging); + } + else + add_to_list_messages (&(room->last_messages), hash); + + if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (room->requested, hash)) + GNUNET_CONTAINER_multihashmap_remove_all (room->requested, hash); +} + +void +switch_room_member_id (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *old_id, + const struct GNUNET_ShortHashCode *new_id, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_SrvContact *contact = GNUNET_CONTAINER_multishortmap_get (room->members, old_id); + + if ((contact) && (GNUNET_YES == GNUNET_CONTAINER_multishortmap_remove (room->members, old_id, contact))) + GNUNET_CONTAINER_multishortmap_put (room->members, new_id, contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); + + struct GNUNET_MESSENGER_MemberInfo *info = GNUNET_CONTAINER_multishortmap_get (room->member_infos, old_id); + + if ((!info) || (GNUNET_YES != GNUNET_CONTAINER_multishortmap_remove (room->member_infos, old_id, contact)) + || (GNUNET_YES != GNUNET_CONTAINER_multishortmap_put (room->member_infos, new_id, contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))) + return; + + if (hash) + add_to_list_messages (&(info->session_messages), hash); +} + +void +rebuild_room_basement_structure (struct GNUNET_MESSENGER_SrvRoom *room) +{ + struct GNUNET_PeerIdentity peer; + size_t src; + + if ((GNUNET_OK != get_service_peer_identity (room->service, &peer)) || (!find_list_tunnels (&(room->basement), &peer, + &src))) + return; + + size_t count = count_of_tunnels (&(room->basement)); + + struct GNUNET_MESSENGER_ListTunnel *element = room->basement.head; + struct GNUNET_MESSENGER_SrvTunnel *tunnel; + + size_t dst = 0; + + while (element) + { + GNUNET_PEER_resolve (element->peer, &peer); + + tunnel = GNUNET_CONTAINER_multipeermap_get (room->tunnels, &peer); + + if (!tunnel) + { + element = remove_from_list_tunnels (&(room->basement), element); + continue; + } + + if (GNUNET_YES == required_connection_between (count, src, dst)) + { + if (GNUNET_SYSERR == connect_tunnel (tunnel)) + { + element = remove_from_list_tunnels (&(room->basement), element); + continue; + } + } + else + disconnect_tunnel (tunnel); + + element = element->next; + dst++; + } +} + +void +handle_room_messages (struct GNUNET_MESSENGER_SrvRoom *room) +{ + while (room->handling.head) + { + struct GNUNET_MESSENGER_ListMessage *element = room->handling.head; + + const struct GNUNET_MESSENGER_Message *msg = get_room_message (room, room->host, &(element->hash), GNUNET_NO); + + if (msg) + handle_service_message (room->service, room, msg, &(element->hash)); + + GNUNET_CONTAINER_DLL_remove(room->handling.head, room->handling.tail, element); + GNUNET_free(element); + } +} + +#include "gnunet-service-messenger_message_recv.h" + +void +callback_room_recv (struct GNUNET_MESSENGER_SrvRoom *room, void *cls, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls; + + if (GNUNET_OK != put_store_message (&(room->store), hash, message)) + return; + + update_room_last_messages (room, message, hash); + + if (GNUNET_MESSENGER_KIND_INFO != message->header.kind) + forward_room_message (room, tunnel, message, hash); + + const int start_handle = room->handling.head ? GNUNET_NO : GNUNET_YES; + + add_to_list_messages (&(room->handling), hash); + + switch (message->header.kind) + { + case GNUNET_MESSENGER_KIND_INFO: + recv_message_info (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_JOIN: + recv_message_join (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_LEAVE: + recv_message_leave (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_NAME: + recv_message_name (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_KEY: + recv_message_key (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_PEER: + recv_message_peer (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_ID: + recv_message_id (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_MISS: + recv_message_miss (room, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_REQUEST: + recv_message_request (room, tunnel, message, hash); + break; + default: + break; + } + + if (GNUNET_YES == start_handle) + handle_room_messages (room); +} + +#include "gnunet-service-messenger_message_send.h" + +void +callback_room_sent (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, void *cls, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + const struct GNUNET_MESSENGER_Message *old_message = get_room_message (room, handle, hash, GNUNET_NO); + + if ((old_message) || (GNUNET_OK != put_store_message (&(room->store), hash, message))) + { + if (old_message != message) + GNUNET_free(message); + } + else + { + struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls; // may be NULL + + update_room_last_messages (room, message, hash); + + const int start_handle = room->handling.head ? GNUNET_NO : GNUNET_YES; + + add_to_list_messages (&(room->handling), hash); + + switch (message->header.kind) + { + case GNUNET_MESSENGER_KIND_INFO: + send_message_info (room, handle, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_JOIN: + send_message_join (room, handle, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_LEAVE: + send_message_leave (room, handle, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_NAME: + send_message_name (room, handle, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_KEY: + send_message_key (room, handle, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_PEER: + send_message_peer (room, handle, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_ID: + send_message_id (room, handle, tunnel, message, hash); + break; + case GNUNET_MESSENGER_KIND_MISS: + send_message_miss (room, handle, tunnel, message, hash); + break; + default: + break; + } + + if (GNUNET_YES == start_handle) + handle_room_messages (room); + } +} diff --git a/src/messenger/gnunet-service-messenger_room.h b/src/messenger/gnunet-service-messenger_room.h new file mode 100644 index 000000000..36c9e8cf5 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_room.h @@ -0,0 +1,378 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_room.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_ROOM_H +#define GNUNET_SERVICE_MESSENGER_ROOM_H + +#include "platform.h" +#include "gnunet_cadet_service.h" +#include "gnunet_container_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" +#include "gnunet_mq_lib.h" + +#include "gnunet-service-messenger_contact.h" + +#include "gnunet_messenger_service.h" +#include "gnunet-service-messenger_basement.h" +#include "gnunet-service-messenger_handle.h" +#include "gnunet-service-messenger_tunnel.h" + +#include "gnunet-service-messenger_list_messages.h" +#include "messenger_api_list_tunnels.h" + +#include "gnunet-service-messenger_message_store.h" +#include "messenger_api_ego.h" + +enum GNUNET_MESSENGER_MemberAccess +{ + GNUNET_MESSENGER_MEMBER_ALLOWED = 1, + GNUNET_MESSENGER_MEMBER_BLOCKED = 1, + + GNUNET_MESSENGER_MEMBER_UNKNOWN = 0 +}; + +struct GNUNET_MESSENGER_MemberInfo +{ + enum GNUNET_MESSENGER_MemberAccess access; + + struct GNUNET_MESSENGER_ListMessages session_messages; +}; + +struct GNUNET_MESSENGER_SrvRoom +{ + struct GNUNET_MESSENGER_Service *service; + struct GNUNET_MESSENGER_SrvHandle *host; + struct GNUNET_CADET_Port *port; + + struct GNUNET_HashCode key; + + struct GNUNET_CONTAINER_MultiPeerMap *tunnels; + struct GNUNET_CONTAINER_MultiShortmap *members; + struct GNUNET_CONTAINER_MultiShortmap *member_infos; + + struct GNUNET_MESSENGER_MessageStore store; + struct GNUNET_CONTAINER_MultiHashMap *requested; + + struct GNUNET_MESSENGER_ListTunnels basement; + struct GNUNET_MESSENGER_ListMessages last_messages; + + struct GNUNET_HashCode *peer_message; + + struct GNUNET_MESSENGER_ListMessages handling; + struct GNUNET_SCHEDULER_Task *idle; + + int strict_access; +}; + +/** + * Creates and allocates a new room for a handle with a given key. + * + * @param handle Handle + * @param key Key of room + * @return New room + */ +struct GNUNET_MESSENGER_SrvRoom* +create_room (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key); + +/** + * Destroys a room and frees its memory fully. + * + * @param room Room + */ +void +destroy_room (struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Returns the contact of a member in a room identified by a given id. If the room + * does not contain a member with the given id, NULL gets returned. + * + * @param room Room + * @param id Member id + * @return Contact or NULL + */ +struct GNUNET_MESSENGER_SrvContact* +get_room_contact (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *id); + +/** + * Adds a contact from the service to a room under a specific id with a given public key. + * + * @param room Room + * @param id Member id + * @param pubkey Public key of EGO + */ +void +add_room_contact (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *id, + const struct GNUNET_IDENTITY_PublicKey *pubkey); + +/** + * Returns the member information of a member in a room identified by a given id. If the room + * does not contain a member with the given id, NULL gets returned. + * + * @param room Room + * @param id Member id + * @return Member information or NULL + */ +struct GNUNET_MESSENGER_MemberInfo* +get_room_member_info (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *id); + +/** + * Tries to generate and allocate a new unique member id checking all current members for possible + * duplicates. If the function fails, NULL gets returned. + * + * @param room Room + * @return New member id or NULL + */ +struct GNUNET_ShortHashCode* +generate_room_member_id (const struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Returns the member id of the member representing the handle currently hosting this room. + * + * @param room Room + * @return Host member id or NULL + */ +const struct GNUNET_ShortHashCode* +get_room_host_id (const struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Changes the member id of the member representing the handle currently hosting this room. + * + * @param room Room + * @param unique_id Unique member id + */ +void +change_room_host_id (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *unique_id); + +/** + * Tries to open a room for a given handle. If the room has already been opened, the handle + * will locally join the room. + * + * Calling this method should result in joining a room and sending a peer message as well for this peer. + * + * If the function returns GNUNET_YES the port for this room is guranteed to be open for incoming connections. + * + * @param room Room + * @param handle Handle + * @return GNUNET_YES on success, GNUNET_NO on failure. + */ +int +open_room (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle); + +/** + * Connects a tunnel to a hosting peer of a room through a so called door which is represented by + * a peer identity of a hosting peer. During the connection the handle will join the room as a member, waiting for + * an info message from the selected host. + * + * @param room Room + * @param handle Handle + * @param door Peer identity + * @return GNUNET_YES on success, GNUNET_NO on failure. + */ +int +entry_room_at (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_PeerIdentity *door); + +/** + * Returns a tunnel granting a direct connection to a specific member in a room. The member gets identified + * by an id. If no tunnel has been linked to the selected id, NULL gets returned. + * + * @param room Room + * @param contact_id Member id + * @return Tunnel to the member or NULL + */ +struct GNUNET_MESSENGER_SrvTunnel* +find_room_tunnel_to (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *contact_id); + +/** + * Packs a message depending on the selected mode into a newly allocated envelope. It will set the + * timestamp of the message, the sender id and the previous messages hash automatically before packing. The message + * will be signed by the handles EGO. + * + * If the optional hash parameter is a valid pointer, its value will be overriden by the signed messages hash. + * + * If mode is set to GNUNET_MESSENGER_PACK_MODE_ENVELOPE, the function returns a valid envelope to send + * through a message queue, otherwise NULL. + * + * @param room Room + * @param handle Handle + * @param message Message + * @param[out] hash Hash of message + * @param mode Packing mode + * @return New envelope or NULL + */ +struct GNUNET_MQ_Envelope* +pack_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, int mode); + +/** + * Sends a message from a given handle into a room. The hash parameter will be + * updated with the hash-value resulting from the sent message. + * + * The function handles packing the message automatically and will call linked message-events locally even if + * the message won't be sent to another peer. + * + * @param room Room + * @param handle Handle + * @param message Message + * @param[out] hash Hash of message + */ +void +send_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash); + +/** + * Sends a message from a given handle into a room excluding one specific tunnel. + * The hash parameter will be updated with the hash-value resulting from the sent message. + * + * The function handles packing the message automatically and will call linked message-events locally even if + * the message won't be sent to another peer. + * + * @param room Room + * @param handle Handle + * @param message Message + * @param[out] hash Hash of message + * @param tunnel Tunnel + */ +void +send_room_message_ext (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, + struct GNUNET_MESSENGER_SrvTunnel *tunnel); + +/** + * Forwards a message with a given hash to a specific tunnel inside of a room. + * + * @param room Room + * @param tunnel Tunnel + * @param message Message + * @param hash Hash of message + */ +void +forward_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, + const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Reduces all current forks inside of the message history of a room to one remaining last message + * by merging them down. All merge messages will be sent from a given handle. + * + * @param room Room + * @param handle Handle + */ +void +merge_room_last_messages (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle); + +/** + * Returns the CADET handle from a rooms service. + * + * @param room Room + * @return CADET handle + */ +struct GNUNET_CADET_Handle* +get_room_cadet (struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Returns the shared secret you need to access a room. + * + * @param room Room + * @return Shared secret + */ +struct GNUNET_HashCode* +get_room_key (struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Returns a tunnel inside of a room leading towards a given peer if such a tunnel exists, + * otherwise NULL. + * + * @param room Room + * @param peer Peer identity + * @return Tunnel or NULL + */ +const struct GNUNET_MESSENGER_SrvTunnel* +get_room_tunnel (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_PeerIdentity *peer); + +/** + * Returns a message from a room identified by a given hash. If no matching message is + * found and request is set to GNUNET_YES, the handle will request the missing message + * automatically. + * + * The function uses the optimized check for a message via its hash from the message store. + * @see contains_store_message() + * + * If a message is missing independent of the following request, NULL gets returned instead of the + * matching message. + * + * @param room Room + * @param handle Handle + * @param hash Hash of message + * @param request Flag to request a message + * @return Message or NULL + */ +const struct GNUNET_MESSENGER_Message* +get_room_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_HashCode *hash, int request); + +/** + * Updates the last messages of a room by replacing them if the previous hash of a given message + * matches with one of the latest messages. + * + * @param room Room + * @param message Message + * @param hash Hash of message + */ +void +update_room_last_messages (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Changes an id of a current member from an old id to a new one and adds optionally the hash of an + * id message to the members information. + * + * @param room Room + * @param old_id Old member id + * @param new_id New member id + * @param hash Hash of id message + */ +void +switch_room_member_id (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *old_id, + const struct GNUNET_ShortHashCode *new_id, const struct GNUNET_HashCode *hash); + +/** + * Rebuilds the decentralized structure for a room by ensuring all required connections are made + * depending on the amount of peers and this peers index in the list of them. + * + * @param room Room + */ +void +rebuild_room_basement_structure (struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Handles all queued up messages of a room to handle in correct order. + * + * @param room Room + */ +void +handle_room_messages (struct GNUNET_MESSENGER_SrvRoom *room); + +#endif //GNUNET_SERVICE_MESSENGER_ROOM_H diff --git a/src/messenger/gnunet-service-messenger_service.c b/src/messenger/gnunet-service-messenger_service.c new file mode 100644 index 000000000..963314fd8 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_service.c @@ -0,0 +1,516 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_service.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_service.h" + +#include "gnunet-service-messenger_message_kind.h" + +#include "gnunet-service-messenger.h" +#include "gnunet-service-messenger_util.h" + +static void +callback_shutdown_service (void *cls) +{ + struct GNUNET_MESSENGER_Service *service = cls; + + if (service) + { + service->shutdown = NULL; + + destroy_service (service); + } +} + +static void +callback_update_ego (void *cls, + struct GNUNET_IDENTITY_Ego *ego, + void **ctx, + const char *identifier) +{ + if ((!ego) || (!identifier)) + return; + + struct GNUNET_MESSENGER_Service *service = cls; + + update_service_ego(service, identifier, GNUNET_IDENTITY_ego_get_private_key(ego)); +} + +struct GNUNET_MESSENGER_Service* +create_service (const struct GNUNET_CONFIGURATION_Handle *config, struct GNUNET_SERVICE_Handle *service_handle) +{ + struct GNUNET_MESSENGER_Service *service = GNUNET_new(struct GNUNET_MESSENGER_Service); + + service->config = config; + service->service = service_handle; + + service->shutdown = GNUNET_SCHEDULER_add_shutdown (&callback_shutdown_service, service); + + service->dir = NULL; + + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (service->config, + GNUNET_MESSENGER_SERVICE_NAME, + "MESSENGER_DIR", &(service->dir))) + { + if (service->dir) + GNUNET_free(service->dir); + + service->dir = NULL; + } + else + { + if ((GNUNET_YES != GNUNET_DISK_directory_test (service->dir, GNUNET_YES)) && (GNUNET_OK + != GNUNET_DISK_directory_create (service->dir))) + { + GNUNET_free(service->dir); + + service->dir = NULL; + } + } + + service->cadet = GNUNET_CADET_connect (service->config); + service->identity = GNUNET_IDENTITY_connect (service->config, &callback_update_ego, service); + + service->egos = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + + init_list_handles (&(service->handles)); + + service->contacts = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + service->rooms = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + + return service; +} + +static int +iterate_destroy_egos (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_Ego *ego = value; + GNUNET_free(ego); + return GNUNET_YES; +} + +static int +iterate_destroy_rooms (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_SrvRoom *room = value; + destroy_room (room); + return GNUNET_YES; +} + +static int +iterate_destroy_contacts (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_SrvContact *contact = value; + destroy_contact (contact); + return GNUNET_YES; +} + +void +destroy_service (struct GNUNET_MESSENGER_Service *service) +{ + if (service->shutdown) + { + GNUNET_SCHEDULER_cancel (service->shutdown); + + service->shutdown = NULL; + } + + GNUNET_CONTAINER_multihashmap_iterate (service->egos, iterate_destroy_egos, NULL); + + clear_list_handles (&(service->handles)); + + GNUNET_CONTAINER_multihashmap_iterate (service->rooms, iterate_destroy_rooms, NULL); + GNUNET_CONTAINER_multihashmap_iterate (service->contacts, iterate_destroy_contacts, NULL); + + GNUNET_CONTAINER_multihashmap_destroy (service->egos); + GNUNET_CONTAINER_multihashmap_destroy (service->rooms); + GNUNET_CONTAINER_multihashmap_destroy (service->contacts); + + if (service->cadet) + { + GNUNET_CADET_disconnect (service->cadet); + + service->cadet = NULL; + } + + if (service->identity) + { + GNUNET_IDENTITY_disconnect (service->identity); + + service->identity = NULL; + } + + if (service->dir) + { + GNUNET_free(service->dir); + + service->dir = NULL; + } + + GNUNET_SERVICE_shutdown (service->service); + + GNUNET_free(service); +} + +struct GNUNET_MESSENGER_Ego* +lookup_service_ego (struct GNUNET_MESSENGER_Service *service, const char *identifier) +{ + GNUNET_assert(identifier); + + struct GNUNET_HashCode hash; + + GNUNET_CRYPTO_hash(identifier, strlen(identifier), &hash); + return GNUNET_CONTAINER_multihashmap_get(service->egos, &hash); +} + +void +update_service_ego (struct GNUNET_MESSENGER_Service *service, const char *identifier, + const struct GNUNET_IDENTITY_PrivateKey* key) +{ + GNUNET_assert((identifier) && (key)); + + struct GNUNET_HashCode hash; + + GNUNET_CRYPTO_hash(identifier, strlen(identifier), &hash); + + struct GNUNET_MESSENGER_Ego* ego = GNUNET_CONTAINER_multihashmap_get(service->egos, &hash); + + if (!ego) + { + ego = GNUNET_new(struct GNUNET_MESSENGER_Ego); + GNUNET_CONTAINER_multihashmap_put(service->egos, &hash, ego, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); + } + + GNUNET_memcpy(&(ego->priv), key, sizeof(*key)); + + if (GNUNET_OK != GNUNET_IDENTITY_key_get_public(key, &(ego->pub))) + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Updating invalid ego key failed!\n"); +} + +struct GNUNET_MESSENGER_SrvHandle* +add_service_handle (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MQ_Handle *mq) +{ + struct GNUNET_MESSENGER_SrvHandle *handle = create_handle (service, mq); + + if (handle) + { + add_list_handle (&(service->handles), handle); + } + + return handle; +} + +void +remove_service_handle (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle) +{ + if (!handle) + return; + + if (GNUNET_YES == remove_list_handle (&(service->handles), handle)) + destroy_handle (handle); +} + +int +get_service_peer_identity (const struct GNUNET_MESSENGER_Service *service, struct GNUNET_PeerIdentity *peer) +{ + return GNUNET_CRYPTO_get_peer_identity (service->config, peer); +} + +struct GNUNET_MESSENGER_SrvContact* +get_service_contact_by_pubkey (struct GNUNET_MESSENGER_Service *service, const struct GNUNET_IDENTITY_PublicKey *pubkey) +{ + struct GNUNET_HashCode hash; + + GNUNET_CRYPTO_hash (pubkey, sizeof(*pubkey), &hash); + + struct GNUNET_MESSENGER_SrvContact *contact = GNUNET_CONTAINER_multihashmap_get (service->contacts, &hash); + + if (contact) + return contact; + + contact = create_contact (pubkey); + + if (GNUNET_OK == GNUNET_CONTAINER_multihashmap_put (service->contacts, &hash, contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + return contact; + + destroy_contact (contact); + return NULL; +} + +void +swap_service_contact_by_pubkey (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvContact *contact, + const struct GNUNET_IDENTITY_PublicKey *pubkey) +{ + const struct GNUNET_HashCode *hash = get_contact_id_from_key (contact); + + if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (service->contacts, hash, contact)) + { + GNUNET_memcpy(&(contact->public_key), pubkey, sizeof(*pubkey)); + + hash = get_contact_id_from_key (contact); + + GNUNET_CONTAINER_multihashmap_put (service->contacts, hash, contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); + } +} + +struct GNUNET_ShortHashCode* +generate_service_new_member_id (struct GNUNET_MESSENGER_Service *service, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_SrvRoom *room = get_service_room (service, key); + + if (room) + { + return generate_room_member_id (room); + } + else + { + struct GNUNET_ShortHashCode *random_id = GNUNET_new(struct GNUNET_ShortHashCode); + generate_free_member_id (random_id, NULL); + return random_id; + } +} + +struct GNUNET_MESSENGER_SrvRoom* +get_service_room (struct GNUNET_MESSENGER_Service *service, const struct GNUNET_HashCode *key) +{ + return GNUNET_CONTAINER_multihashmap_get (service->rooms, key); +} + +int +open_service_room (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_SrvRoom *room = get_service_room (service, key); + + if (room) + return open_room (room, handle); + + room = create_room (handle, key); + + if ((GNUNET_YES == open_room (room, handle)) && (GNUNET_OK + == GNUNET_CONTAINER_multihashmap_put (service->rooms, key, room, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))) + return GNUNET_YES; + + destroy_room (room); + return GNUNET_NO; +} + +int +entry_service_room (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_PeerIdentity *door, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_SrvRoom *room = get_service_room (service, key); + + if (room) + { + if (GNUNET_YES == entry_room_at (room, handle, door)) + return GNUNET_YES; + else + return GNUNET_NO; + } + + room = create_room (handle, key); + + if ((GNUNET_YES == entry_room_at (room, handle, door)) && (GNUNET_OK + == GNUNET_CONTAINER_multihashmap_put (service->rooms, key, room, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))) + { + return GNUNET_YES; + } + else + { + destroy_room (room); + return GNUNET_NO; + } + +} + +int +close_service_room (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_SrvRoom *room = get_service_room (service, key); + + if (!room) + return GNUNET_NO; + + struct GNUNET_MESSENGER_Message *message = create_message_leave (); + + if (message) + { + struct GNUNET_HashCode hash; + + send_room_message (room, handle, message, &hash); + destroy_message (message); + } + + const struct GNUNET_ShortHashCode *id = get_handle_member_id (handle, key); + + GNUNET_assert(id); + + if (GNUNET_YES != GNUNET_CONTAINER_multihashmap_remove (handle->member_ids, key, id)) + return GNUNET_NO; + + struct GNUNET_MESSENGER_SrvHandle *member_handle = (struct GNUNET_MESSENGER_SrvHandle*) find_list_handle_by_member ( + &(service->handles), key); + + if (!member_handle) + { + if (GNUNET_OK == GNUNET_CONTAINER_multihashmap_remove (service->rooms, key, room)) + { + destroy_room (room); + return GNUNET_YES; + } + else + return GNUNET_NO; + } + + if (room->host == handle) + room->host = member_handle; + + return GNUNET_YES; +} + +static void +get_room_data_subdir (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvRoom *room, char **dir) +{ + GNUNET_asprintf (dir, "%s%s%c%s%c", service->dir, "rooms", DIR_SEPARATOR, GNUNET_h2s (&(room->key)), DIR_SEPARATOR); +} + +void +load_service_room_and_messages (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvRoom *room) +{ + char *room_dir; + get_room_data_subdir (service, room, &room_dir); + + if (GNUNET_YES == GNUNET_DISK_directory_test (room_dir, GNUNET_YES)) + { + load_message_store (&room->store, room_dir); + + char *config_file; + GNUNET_asprintf (&config_file, "%s%s", room_dir, "room.cfg"); + + struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); + + if ((GNUNET_YES == GNUNET_DISK_file_test (config_file)) && (GNUNET_OK + == GNUNET_CONFIGURATION_parse (cfg, config_file))) + { + unsigned long long access; + + if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number (cfg, "room", "access-rule", &access)) + room->strict_access = (int) (access); + + char *message_string; + + if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, "room", "last-message", &message_string)) && (message_string)) + { + struct GNUNET_HashCode hash; + + GNUNET_CRYPTO_hash_from_string(message_string, &hash); + + const struct GNUNET_MESSENGER_Message *message = get_room_message (room, room->host, &hash, GNUNET_NO); + + if (message) + update_room_last_messages (room, message, &hash); + + GNUNET_free(message_string); + } + } + + GNUNET_CONFIGURATION_destroy (cfg); + + GNUNET_free(config_file); + } + + GNUNET_free(room_dir); +} + +void +save_service_room_and_messages (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvRoom *room) +{ + if (GNUNET_YES != GNUNET_CONTAINER_multihashmap_contains (service->rooms, &(room->key))) + { + return; + } + + char *room_dir; + get_room_data_subdir (service, room, &room_dir); + + if ((GNUNET_YES == GNUNET_DISK_directory_test (room_dir, GNUNET_NO)) || (GNUNET_OK + == GNUNET_DISK_directory_create (room_dir))) + { + save_message_store (&room->store, room_dir); + + char *config_file; + GNUNET_asprintf (&config_file, "%s%s", room_dir, "room.cfg"); + + struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); + + GNUNET_CONFIGURATION_set_value_number (cfg, "room", "access-rule", room->strict_access); + + if (room->last_messages.head) + GNUNET_CONFIGURATION_set_value_string (cfg, "room", "last-message", + GNUNET_h2s_full (&(room->last_messages.head->hash))); + + GNUNET_CONFIGURATION_write (cfg, config_file); + GNUNET_CONFIGURATION_destroy (cfg); + + GNUNET_free(config_file); + } + + GNUNET_free(room_dir); +} + +void +handle_service_message (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvRoom *room, + const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_ListHandle *element = service->handles.head; + + const uint16_t length = get_message_size (message); + + while (element) + { + struct GNUNET_MESSENGER_SrvHandle *handle = (struct GNUNET_MESSENGER_SrvHandle*) element->handle; + + if ((handle->mq) && (get_handle_member_id (handle, &(room->key)))) + { + struct GNUNET_MESSENGER_RecvMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg_extra(msg, length, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_RECV_MESSAGE); + + GNUNET_memcpy(&(msg->key), &(room->key), sizeof(room->key)); + GNUNET_memcpy(&(msg->hash), hash, sizeof(*hash)); + + char *buffer = ((char*) msg) + sizeof(*msg); + encode_message (message, length, buffer); + + GNUNET_MQ_send (handle->mq, env); + } + + element = element->next; + } +} diff --git a/src/messenger/gnunet-service-messenger_service.h b/src/messenger/gnunet-service-messenger_service.h new file mode 100644 index 000000000..246c74771 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_service.h @@ -0,0 +1,259 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_service.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_SERVICE_H +#define GNUNET_SERVICE_MESSENGER_SERVICE_H + +#include "platform.h" +#include "gnunet_configuration_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_container_lib.h" +#include "gnunet_disk_lib.h" +#include "gnunet_identity_service.h" + +#include "messenger_api_ego.h" + +#include "gnunet-service-messenger_list_handles.h" + +#include "gnunet-service-messenger_contact.h" +#include "gnunet-service-messenger_room.h" + +struct GNUNET_MESSENGER_Service +{ + const struct GNUNET_CONFIGURATION_Handle *config; + struct GNUNET_SERVICE_Handle *service; + + struct GNUNET_SCHEDULER_Task *shutdown; + + char *dir; + + struct GNUNET_CADET_Handle *cadet; + struct GNUNET_IDENTITY_Handle *identity; + + struct GNUNET_CONTAINER_MultiHashMap *egos; + + struct GNUNET_MESSENGER_ListHandles handles; + + struct GNUNET_CONTAINER_MultiHashMap *contacts; + struct GNUNET_CONTAINER_MultiHashMap *rooms; +}; + +/** + * Creates and allocates a new service using a given config and a GNUnet service handle. + * + * @param config Configuration + * @param service_handle GNUnet service handle + * @return New service + */ +struct GNUNET_MESSENGER_Service* +create_service (const struct GNUNET_CONFIGURATION_Handle *config, struct GNUNET_SERVICE_Handle *service_handle); + +/** + * Destroys a service and frees its memory fully. + * + * @param service Service + */ +void +destroy_service (struct GNUNET_MESSENGER_Service *service); + +/** + * Lookups an EGO which was registered to a service under + * a specific identifier. + * + * @param service Service + * @param identifier Identifier string + * @return EGO or NULL + */ +struct GNUNET_MESSENGER_Ego* +lookup_service_ego (struct GNUNET_MESSENGER_Service *service, const char *identifier); + +/** + * Updates the registration of an EGO to a service under + * a specific identifier with a new key. + * + * @param service Service + * @param identifier Identifier string + * @param key Private EGO key + */ +void +update_service_ego (struct GNUNET_MESSENGER_Service *service, const char *identifier, + const struct GNUNET_IDENTITY_PrivateKey* key); + +/** + * Creates and adds a new handle to a service using a given message queue. + * + * @param service Service + * @param mq Message queue + * @return New handle + */ +struct GNUNET_MESSENGER_SrvHandle* +add_service_handle (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MQ_Handle *mq); + +/** + * Removes a handle from a service and destroys it. + * + * @param service Service + * @param handle Handle + */ +void +remove_service_handle (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle); + +/** + * Tries to write the peer identity of the peer running a service on to the peer + * parameter. The functions returns GNUNET_OK on success, otherwise GNUNET_SYSERR. + * + * @param service Service + * @param[out] peer Peer identity + * @return GNUNET_OK on success, otherwise GNUNET_SYSERR + */ +int +get_service_peer_identity (const struct GNUNET_MESSENGER_Service *service, struct GNUNET_PeerIdentity *peer); + +/** + * Returns a contact of a service identified by a given public key. If no matching contact exists, + * it will tried to create one with the specific public key. If the function still fails to do so, + * NULL gets returned. + * + * @param service Service + * @param pubkey Public key of EGO + * @return Contact + */ +struct GNUNET_MESSENGER_SrvContact* +get_service_contact_by_pubkey (struct GNUNET_MESSENGER_Service *service, const struct GNUNET_IDENTITY_PublicKey *pubkey); + +/** + * Changes the public key for a contact known to a service to a specific public key and + * updates local map entries to access the contact by its updated key. + * + * @param service Service + * @param contact Contact + * @param pubkey Public key of EGO + */ +void +swap_service_contact_by_pubkey (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvContact *contact, + const struct GNUNET_IDENTITY_PublicKey *pubkey); + +/** + * Tries to generate and allocate a new unique member id for a given room of a service identified by its key. + * If the generation fails caused by too many tries of duplicates, it returns NULL. + * + * @param service Service + * @param key Key of room + * @return Newly generated member id or NULL + */ +struct GNUNET_ShortHashCode* +generate_service_new_member_id (struct GNUNET_MESSENGER_Service *service, const struct GNUNET_HashCode *key); + +/** + * Returns the room identified by a given key for a service. If the service doesn't know any room + * using the given key, NULL gets returned. + * + * @param service Service + * @param key Key of room + * @return Room or NULL + */ +struct GNUNET_MESSENGER_SrvRoom* +get_service_room (struct GNUNET_MESSENGER_Service *service, const struct GNUNET_HashCode *key); + +/** + * Tries to open a room using a given key for a service by a specific handle. The room will be + * created if necessary. If the function is successful, it returns GNUNET_YES, otherwise GNUNET_NO. + * + * @param service Service + * @param handle Handle + * @param key Key of room + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +open_service_room (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_HashCode *key); + +/** + * Tries to enter a room using a given key for a service by a specific handle. The room will + * be created if necessary. If the function is successful, it returns GNUNET_YES, otherwise GNUNET_NO. + * + * The room will be entered through the peer identitied by the peer identity provided as door parameter and + * a new connection will be made. + * + * @param service Service + * @param handle Handle + * @param door Peer identity + * @param key Key of room + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +entry_service_room (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_PeerIdentity *door, const struct GNUNET_HashCode *key); + +/** + * Tries to close a room using a given key for a service by a specific handle. The room will + * be created if necessary. If the function is successful, it returns GNUNET_YES, otherwise GNUNET_NO. + * + * If the specific handle is currently the host of the room for this service, a new handle which is a member will + * take its place. Otherwise the room will be destroyed for this service. + * + * @param service Service + * @param handle Handle + * @param key Key of room + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +close_service_room (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvHandle *handle, + const struct GNUNET_HashCode *key); + +/** + * Loads the local configuration for a given room of a service which contains the last messages hash + * and the ruleset for general access of new members. + * + * @param service Service + * @param room Room + */ +void +load_service_room_and_messages (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Saves the configuration for a given room of a service which contains the last messages hash + * and the ruleset for general access of new members locally. + * + * @param service Service + * @param room Room + */ +void +save_service_room_and_messages (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvRoom *room); + +/** + * Sends a received or sent message with a given hash to each handle of a service which + * is currently member of a specific room for handling it in the client API. + * + * @param service Service + * @param room Room + * @param message Message + * @param hash Hash of message + */ +void +handle_service_message (struct GNUNET_MESSENGER_Service *service, struct GNUNET_MESSENGER_SrvRoom *room, + const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +#endif //GNUNET_SERVICE_MESSENGER_SERVICE_H diff --git a/src/messenger/gnunet-service-messenger_tunnel.c b/src/messenger/gnunet-service-messenger_tunnel.c new file mode 100644 index 000000000..df9e5c4c7 --- /dev/null +++ b/src/messenger/gnunet-service-messenger_tunnel.c @@ -0,0 +1,300 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_tunnel.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_tunnel.h" + +#include "gnunet-service-messenger_handle.h" +#include "gnunet-service-messenger_util.h" + +struct GNUNET_MESSENGER_SrvTunnel* +create_tunnel (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_PeerIdentity *door) +{ + GNUNET_assert((room) && (door)); + + struct GNUNET_MESSENGER_SrvTunnel *tunnel = GNUNET_new(struct GNUNET_MESSENGER_SrvTunnel); + + tunnel->room = room; + tunnel->channel = NULL; + + tunnel->peer = GNUNET_PEER_intern (door); + tunnel->contact_id = NULL; + + tunnel->peer_message = NULL; + tunnel->last_message = NULL; + + return tunnel; +} + +void +destroy_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel) +{ + GNUNET_assert(tunnel); + + if (tunnel->channel) + GNUNET_CADET_channel_destroy (tunnel->channel); + + GNUNET_PEER_change_rc (tunnel->peer, -1); + + if (tunnel->contact_id) + GNUNET_free(tunnel->contact_id); + + if (tunnel->peer_message) + GNUNET_free(tunnel->peer_message); + + if (tunnel->last_message) + GNUNET_free(tunnel->last_message); + + GNUNET_free(tunnel); +} + +int +bind_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_CADET_Channel *channel) +{ + GNUNET_assert(tunnel); + + if (tunnel->channel) + { + if (tunnel->contact_id) + return GNUNET_NO; + + delayed_disconnect_channel (tunnel->channel); + } + + tunnel->channel = channel; + + return GNUNET_YES; +} + +extern void +callback_room_disconnect (struct GNUNET_MESSENGER_SrvRoom *room, void *cls); + +void +callback_tunnel_disconnect (void *cls, const struct GNUNET_CADET_Channel *channel) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls; + + if (tunnel) + { + tunnel->channel = NULL; + + callback_room_disconnect (tunnel->room, cls); + } +} + +extern int +callback_verify_room_message (struct GNUNET_MESSENGER_SrvRoom *room, void *cls, + struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash); + +int +check_tunnel_message (void *cls, const struct GNUNET_MessageHeader *header) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls; + + if (!tunnel) + return GNUNET_NO; + + const uint16_t length = ntohs (header->size) - sizeof(*header); + const char *buffer = (const char*) &header[1]; + + struct GNUNET_MESSENGER_Message message; + + if (length < sizeof(message.header)) + return GNUNET_NO; + + if (GNUNET_YES != decode_message (&message, length, buffer)) + return GNUNET_NO; + + struct GNUNET_HashCode hash; + hash_message (length, buffer, &hash); + + int result = callback_verify_room_message (tunnel->room, cls, &message, &hash); + + if (GNUNET_MESSENGER_KIND_PEER == message.header.kind) + { + struct GNUNET_PeerIdentity identity; + + GNUNET_PEER_resolve (tunnel->peer, &identity); + + if (0 == GNUNET_memcmp(&(message.body.peer.peer), &(identity))) + { + if (tunnel->contact_id) + { + if (0 != GNUNET_memcmp(tunnel->contact_id, &(message.header.sender_id))) + result = GNUNET_SYSERR; + } + else + { + tunnel->contact_id = GNUNET_new(struct GNUNET_ShortHashCode); + + GNUNET_memcpy(tunnel->contact_id, &(message.header.sender_id), sizeof(struct GNUNET_ShortHashCode)); + } + } + } + + return (result == GNUNET_YES ? GNUNET_OK : GNUNET_NO); +} + +extern void +callback_room_recv (struct GNUNET_MESSENGER_SrvRoom *room, void *cls, struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +void +handle_tunnel_message (void *cls, const struct GNUNET_MessageHeader *header) +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls; + + const uint16_t length = ntohs (header->size) - sizeof(*header); + const char *buffer = (const char*) &header[1]; + + struct GNUNET_MESSENGER_Message message; + struct GNUNET_HashCode hash; + + decode_message (&message, length, buffer); + hash_message (length, buffer, &hash); + + if (tunnel) + { + if (!tunnel->last_message) + tunnel->last_message = GNUNET_new(struct GNUNET_HashCode); + + GNUNET_memcpy(tunnel->last_message, &hash, sizeof(struct GNUNET_HashCode)); + + callback_room_recv (tunnel->room, cls, copy_message (&message), &hash); + } + + GNUNET_CADET_receive_done (tunnel->channel); +} + +int +connect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel) +{ + GNUNET_assert(tunnel); + + if (tunnel->channel) + return GNUNET_NO; + + const struct GNUNET_PeerIdentity *door = GNUNET_PEER_resolve2 (tunnel->peer); + + struct GNUNET_CADET_Handle *cadet = get_room_cadet (tunnel->room); + struct GNUNET_HashCode *key = get_room_key (tunnel->room); + + struct GNUNET_MQ_MessageHandler handlers[] = { GNUNET_MQ_hd_var_size(tunnel_message, GNUNET_MESSAGE_TYPE_CADET_CLI, + struct GNUNET_MessageHeader, NULL), + GNUNET_MQ_handler_end() }; + + tunnel->channel = GNUNET_CADET_channel_create (cadet, tunnel, door, key, NULL, callback_tunnel_disconnect, handlers); + + return GNUNET_YES; +} + +void +disconnect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel) +{ + if (tunnel->channel) + { + delayed_disconnect_channel (tunnel->channel); + + tunnel->channel = NULL; + } +} + +int +is_tunnel_connected (const struct GNUNET_MESSENGER_SrvTunnel *tunnel) +{ + return (tunnel->channel ? GNUNET_YES : GNUNET_NO); +} + +struct GNUNET_MESSENGER_MessageSent +{ + struct GNUNET_MESSENGER_SrvTunnel *tunnel; + struct GNUNET_HashCode hash; +}; + +extern void +callback_room_sent (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, void *cls, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +static void +callback_tunnel_sent (void *cls) +{ + struct GNUNET_MESSENGER_MessageSent *sent = cls; + + if (sent->tunnel) + { + if (!sent->tunnel->last_message) + sent->tunnel->last_message = GNUNET_new(struct GNUNET_HashCode); + + GNUNET_memcpy(sent->tunnel->last_message, &(sent->hash), sizeof(struct GNUNET_HashCode)); + } + + GNUNET_free(sent); +} + +void +send_tunnel_envelope (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MQ_Envelope *env, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MQ_Handle *mq = GNUNET_CADET_get_mq (tunnel->channel); + + struct GNUNET_MESSENGER_MessageSent *sent = GNUNET_new(struct GNUNET_MESSENGER_MessageSent); + + GNUNET_memcpy(&(sent->hash), hash, sizeof(struct GNUNET_HashCode)); + + sent->tunnel = tunnel; + + GNUNET_MQ_notify_sent (env, callback_tunnel_sent, sent); + GNUNET_MQ_send (mq, env); + + callback_room_sent (tunnel->room, (struct GNUNET_MESSENGER_SrvHandle*) handle, tunnel, message, hash); +} + +void +send_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MESSENGER_Message *message, + struct GNUNET_HashCode *hash) +{ + struct GNUNET_MQ_Envelope *env = pack_room_message (tunnel->room, (struct GNUNET_MESSENGER_SrvHandle*) handle, + message, hash, + GNUNET_MESSENGER_PACK_MODE_ENVELOPE); + + if (env) + send_tunnel_envelope (tunnel, handle, env, copy_message (message), hash); +} + +void +forward_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_Message *clone = copy_message (message); + struct GNUNET_MQ_Envelope *env = pack_message (clone, NULL, NULL, GNUNET_MESSENGER_PACK_MODE_ENVELOPE); + + if (env) + send_tunnel_envelope (tunnel, NULL, env, clone, hash); +} + +const struct GNUNET_HashCode* +get_tunnel_peer_message (const struct GNUNET_MESSENGER_SrvTunnel *tunnel) +{ + return tunnel->peer_message; +} diff --git a/src/messenger/gnunet-service-messenger_tunnel.h b/src/messenger/gnunet-service-messenger_tunnel.h new file mode 100644 index 000000000..e6efb226d --- /dev/null +++ b/src/messenger/gnunet-service-messenger_tunnel.h @@ -0,0 +1,155 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_tunnel.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_TUNNEL_H +#define GNUNET_SERVICE_MESSENGER_TUNNEL_H + +#include "platform.h" +#include "gnunet_cadet_service.h" +#include "gnunet_peer_lib.h" +#include "gnunet_crypto_lib.h" + +#include "gnunet-service-messenger_room.h" + +struct GNUNET_MESSENGER_SrvTunnel +{ + struct GNUNET_MESSENGER_SrvRoom *room; + struct GNUNET_CADET_Channel *channel; + + GNUNET_PEER_Id peer; + struct GNUNET_ShortHashCode *contact_id; + + struct GNUNET_HashCode *peer_message; + struct GNUNET_HashCode *last_message; +}; + +/** + * Creates and allocates a tunnel of a room to a specific peer identity. + * + * @param room Room + * @param door Peer identity + * @return New tunnel + */ +struct GNUNET_MESSENGER_SrvTunnel* +create_tunnel (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_PeerIdentity *door); + +/** + * Destroys a tunnel and frees its memory fully. + * + * @param tunnel + */ +void +destroy_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); + +/** + * Binds a CADET channel to a tunnel on returns GNUNET_YES only if + * the bounds channel was replaced successfully, otherwise GNUNET_NO gets returned. + * + * @param tunnel Tunnel + * @param channel CADET channel + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +bind_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_CADET_Channel *channel); + +/** + * Tries to connect a tunnel by creating a new CADET channel and binding it. + * The function returns GNUNET_YES on success, otherwise GNUNET_NO. + * + * @param tunnel Tunnel + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +connect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); + +/** + * Disconnects and unbinds a channel from a tunnel. The actual disconnection + * will be asynchronous. + * + * @param tunnel Tunnel + */ +void +disconnect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); + +/** + * Returns the status of a currently bound channel of a tunnel. + * + * @param tunnel Tunnel + * @return GNUNET_YES or GNUNET_NO + */ +int +is_tunnel_connected (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); + +/** + * Sends an envelope containing a message with a given hash through + * a tunnel by a given handle. + * + * @param tunnel Tunnel + * @param handle Handle + * @param env Envelope + * @param message Message + * @param hash Hash of message + */ +void +send_tunnel_envelope (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MQ_Envelope *env, + struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); + +/** + * Sends a message by packing it automatically into an envelope and passing it + * through the tunnel. The used handle will sign the message and + * the hash will be calculated and stored. + * + * @param tunnel Tunnel + * @param handle Handle + * @param[out] message Message + * @param[out] hash Hash of message + */ +void +send_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MESSENGER_Message *message, + struct GNUNET_HashCode *hash); + +/** + * Forwards a given message with a known hash through a tunnel. + * + * @param tunnel Tunnel + * @param message Message + * @param hash Hash of message + */ +void +forward_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +/** + * Returns the hash of the latest peer message published through a given tunnel + * and matching the tunnels peer identity. If no peer message has been linked to the tunnel + * yet, NULL gets returned. + * + * @param tunnel Tunnel + * @return Hash of peer message or NULL + */ +const struct GNUNET_HashCode* +get_tunnel_peer_message (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); + +#endif //GNUNET_SERVICE_MESSENGER_TUNNEL_H diff --git a/src/messenger/gnunet-service-messenger_util.c b/src/messenger/gnunet-service-messenger_util.c new file mode 100644 index 000000000..94fc9469d --- /dev/null +++ b/src/messenger/gnunet-service-messenger_util.c @@ -0,0 +1,64 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_util.c + * @brief GNUnet MESSENGER service + */ + +#include "gnunet-service-messenger_util.h" + +static void +callback_close_channel (void *cls) +{ + struct GNUNET_CADET_Channel *channel = cls; + + if (channel) + GNUNET_CADET_channel_destroy (channel); +} + +void +delayed_disconnect_channel (struct GNUNET_CADET_Channel *channel) +{ + GNUNET_SCHEDULER_add_delayed_with_priority (GNUNET_TIME_relative_get_zero_ (), GNUNET_SCHEDULER_PRIORITY_URGENT, + callback_close_channel, channel); +} + +int +generate_free_member_id (struct GNUNET_ShortHashCode *id, const struct GNUNET_CONTAINER_MultiShortmap *members) +{ + size_t counter = 1 + (members ? GNUNET_CONTAINER_multishortmap_size (members) : 0); + + do + { + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_STRONG, id, sizeof(struct GNUNET_ShortHashCode)); + + if ((members) && (GNUNET_YES == GNUNET_CONTAINER_multishortmap_contains (members, id))) + counter--; + else + break; + } + while (counter > 0); + + if (counter) + return GNUNET_YES; + + return GNUNET_NO; +} diff --git a/src/messenger/gnunet-service-messenger_util.h b/src/messenger/gnunet-service-messenger_util.h new file mode 100644 index 000000000..20f8f0afe --- /dev/null +++ b/src/messenger/gnunet-service-messenger_util.h @@ -0,0 +1,53 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/gnunet-service-messenger_util.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_SERVICE_MESSENGER_UTIL_H +#define GNUNET_SERVICE_MESSENGER_UTIL_H + +#include "platform.h" +#include "gnunet_cadet_service.h" +#include "gnunet_container_lib.h" +#include "gnunet_crypto_lib.h" + +/** + * Starts an urgent task to close a CADET channel asynchronously. + * + * @param channel Channel + */ +void +delayed_disconnect_channel (struct GNUNET_CADET_Channel *channel); + +/** + * Tries to generate an unused member id and store it into the id parameter. A map containing all currently + * used member ids is used to check against. + * + * @param[out] id New member id + * @param members Map of member ids + * @return GNUNET_YES on success, GNUNET_NO on failure + */ +int +generate_free_member_id (struct GNUNET_ShortHashCode *id, const struct GNUNET_CONTAINER_MultiShortmap *members); + +#endif //GNUNET_SERVICE_MESSENGER_UTIL_H diff --git a/src/messenger/messenger.conf.in b/src/messenger/messenger.conf.in new file mode 100644 index 000000000..59e11b166 --- /dev/null +++ b/src/messenger/messenger.conf.in @@ -0,0 +1,13 @@ +[messenger] +START_ON_DEMAND = YES +PORT = 2097 +HOSTNAME = localhost +BINARY = gnunet-service-messenger +ACCEPT_FROM = 127.0.0.1; +ACCEPT_FROM6 = ::1; +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-messenger.sock +UNIX_MATCH_UID = NO +UNIX_MATCH_GID = YES + +# Directory to store messages and contacts +MESSENGER_DIR = $GNUNET_DATA_HOME/messenger/ \ No newline at end of file diff --git a/src/messenger/messenger_api.c b/src/messenger/messenger_api.c new file mode 100644 index 000000000..6401b18d7 --- /dev/null +++ b/src/messenger/messenger_api.c @@ -0,0 +1,568 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api.c + * @brief messenger api: client implementation of GNUnet MESSENGER service + */ + +#include "gnunet_messenger_service.h" + +#include "gnunet-service-messenger.h" + +#include "messenger_api_handle.h" +#include "messenger_api_message.h" + +const char* +GNUNET_MESSENGER_name_of_kind (enum GNUNET_MESSENGER_MessageKind kind) +{ + switch (kind) + { + case GNUNET_MESSENGER_KIND_INFO: + return "INFO"; + case GNUNET_MESSENGER_KIND_JOIN: + return "JOIN"; + case GNUNET_MESSENGER_KIND_LEAVE: + return "LEAVE"; + case GNUNET_MESSENGER_KIND_NAME: + return "NAME"; + case GNUNET_MESSENGER_KIND_KEY: + return "KEY"; + case GNUNET_MESSENGER_KIND_PEER: + return "PEER"; + case GNUNET_MESSENGER_KIND_ID: + return "ID"; + case GNUNET_MESSENGER_KIND_MISS: + return "MISS"; + case GNUNET_MESSENGER_KIND_MERGE: + return "MERGE"; + case GNUNET_MESSENGER_KIND_REQUEST: + return "REQUEST"; + case GNUNET_MESSENGER_KIND_INVITE: + return "INVITE"; + case GNUNET_MESSENGER_KIND_TEXT: + return "TEXT"; + case GNUNET_MESSENGER_KIND_FILE: + return "FILE"; + default: + return "UNKNOWN"; + } +} + +static int +check_get_name (void *cls, const struct GNUNET_MESSENGER_NameMessage *msg) +{ + GNUNET_MQ_check_zero_termination(msg); + return GNUNET_OK; +} + +static void +handle_get_name (void *cls, const struct GNUNET_MESSENGER_NameMessage *msg) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + const char *name = ((const char*) msg) + sizeof(*msg); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Set name of handle: %s\n", name); + + set_handle_name (handle, strlen(name) > 0? name : NULL); +} + +static void +handle_get_key (void *cls, const struct GNUNET_MESSENGER_KeyMessage *msg) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + const struct GNUNET_IDENTITY_PublicKey *pubkey = &(msg->pubkey); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Set key of handle: %s\n", GNUNET_IDENTITY_public_key_to_string (pubkey)); + + set_handle_key (handle, pubkey); + + if (handle->identity_callback) + handle->identity_callback (handle->identity_cls, handle); +} + +static void +handle_member_id (void *cls, const struct GNUNET_MESSENGER_MemberMessage *msg) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + const struct GNUNET_HashCode *key = &(msg->key); + const struct GNUNET_ShortHashCode *id = &(msg->id); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Set id of handle in room: %s\n", GNUNET_h2s (key)); + + struct GNUNET_MESSENGER_Room *room = GNUNET_CONTAINER_multihashmap_get (handle->rooms, key); + + if (room) + { + if (!room->contact_id) + room->contact_id = GNUNET_new(struct GNUNET_ShortHashCode); + + GNUNET_memcpy(room->contact_id, id, sizeof(*id)); + } +} + +static void +handle_room_open (void *cls, const struct GNUNET_MESSENGER_RoomMessage *msg) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + const struct GNUNET_HashCode *key = &(msg->key); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Opened room: %s\n", GNUNET_h2s (key)); + + open_handle_room (handle, key); +} + +static void +handle_room_entry (void *cls, const struct GNUNET_MESSENGER_RoomMessage *msg) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + const struct GNUNET_PeerIdentity *door = &(msg->door); + const struct GNUNET_HashCode *key = &(msg->key); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Entered room: %s\n", GNUNET_h2s (key)); + + entry_handle_room_at (handle, door, key); +} + +static void +handle_room_close (void *cls, const struct GNUNET_MESSENGER_RoomMessage *msg) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + const struct GNUNET_HashCode *key = &(msg->key); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Closed room: %s\n", GNUNET_h2s (key)); + + close_handle_room (handle, key); +} + +static int +check_recv_message (void *cls, const struct GNUNET_MESSENGER_RecvMessage *msg) +{ + const uint16_t full_length = ntohs (msg->header.size) - sizeof(msg->header); + + if (full_length < sizeof(msg->hash)) + return GNUNET_NO; + + const uint16_t length = full_length - sizeof(msg->hash); + const char *buffer = ((const char*) msg) + sizeof(*msg); + + struct GNUNET_MESSENGER_Message message; + + if (length < sizeof(message.header)) + return GNUNET_NO; + + if (GNUNET_YES != decode_message (&message, length, buffer)) + return GNUNET_NO; + + return GNUNET_OK; +} + +static void +handle_recv_message (void *cls, const struct GNUNET_MESSENGER_RecvMessage *msg) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + const struct GNUNET_HashCode *key = &(msg->key); + const struct GNUNET_HashCode *hash = &(msg->hash); + + const char *buffer = ((const char*) msg) + sizeof(*msg); + + const uint16_t length = ntohs (msg->header.size) - sizeof(*msg); + + struct GNUNET_MESSENGER_Message message; + decode_message (&message, length, buffer); + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Receiving message: %s\n", GNUNET_MESSENGER_name_of_kind (message.header.kind)); + + struct GNUNET_MESSENGER_Room *room = GNUNET_CONTAINER_multihashmap_get (handle->rooms, key); + + if (room) + { + handle_room_message (room, &message, hash); + + if (handle->msg_callback) + handle->msg_callback (handle->msg_cls, room, &message, hash); + } + else + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "MESSENGER ERROR: Room not found\n"); +} + +static void +reconnect (struct GNUNET_MESSENGER_Handle *handle); + +static void +send_open_room (struct GNUNET_MESSENGER_Handle *handle, struct GNUNET_MESSENGER_Room *room) +{ + struct GNUNET_MESSENGER_RoomMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_OPEN); + GNUNET_memcpy(&(msg->key), &(room->key), sizeof(room->key)); + GNUNET_MQ_send (handle->mq, env); +} + +static void +send_entry_room (struct GNUNET_MESSENGER_Handle *handle, struct GNUNET_MESSENGER_Room *room, + const struct GNUNET_PeerIdentity *door) +{ + struct GNUNET_MESSENGER_RoomMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_ENTRY); + GNUNET_memcpy(&(msg->door), door, sizeof(*door)); + GNUNET_memcpy(&(msg->key), &(room->key), sizeof(room->key)); + GNUNET_MQ_send (handle->mq, env); +} + +static void +send_close_room (struct GNUNET_MESSENGER_Handle *handle, struct GNUNET_MESSENGER_Room *room) +{ + struct GNUNET_MESSENGER_RoomMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_CLOSE); + GNUNET_memcpy(&(msg->key), &(room->key), sizeof(room->key)); + GNUNET_MQ_send (handle->mq, env); +} + +static int +iterate_reset_room (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + struct GNUNET_MESSENGER_Room *room = value; + + if (GNUNET_YES == room->opened) + send_open_room (handle, room); + + struct GNUNET_MESSENGER_ListTunnel *entry = room->entries.head; + + struct GNUNET_PeerIdentity door; + + while (entry) + { + GNUNET_PEER_resolve (entry->peer, &door); + + send_entry_room (handle, room, &door); + + entry = entry->next; + } + + return GNUNET_YES; +} + +static void +callback_reconnect (void *cls) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + handle->reconnect_task = NULL; + handle->reconnect_time = GNUNET_TIME_STD_BACKOFF(handle->reconnect_time) + ; + + reconnect (handle); + + GNUNET_CONTAINER_multihashmap_iterate (handle->rooms, iterate_reset_room, handle); +} + +static int +iterate_close_room (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + struct GNUNET_MESSENGER_Room *room = value; + + send_close_room (handle, room); + + return GNUNET_YES; +} + +static void +callback_mq_error (void *cls, enum GNUNET_MQ_Error error) +{ + struct GNUNET_MESSENGER_Handle *handle = cls; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "MQ ERROR: %u\n", error); + + GNUNET_CONTAINER_multihashmap_iterate (handle->rooms, iterate_close_room, handle); + + if (handle->mq) + { + GNUNET_MQ_destroy (handle->mq); + handle->mq = NULL; + } + + handle->reconnect_task = GNUNET_SCHEDULER_add_delayed (handle->reconnect_time, &callback_reconnect, handle); +} + +static void +reconnect (struct GNUNET_MESSENGER_Handle *handle) +{ + const struct GNUNET_MQ_MessageHandler handlers[] = { GNUNET_MQ_hd_var_size( + get_name, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_GET_NAME, struct GNUNET_MESSENGER_NameMessage, handle), + GNUNET_MQ_hd_fixed_size( + get_key, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_GET_KEY, + struct GNUNET_MESSENGER_KeyMessage, handle), + GNUNET_MQ_hd_fixed_size( + member_id, + GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_MEMBER_ID, + struct GNUNET_MESSENGER_MemberMessage, handle), + GNUNET_MQ_hd_fixed_size(room_open, + GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_OPEN, + struct GNUNET_MESSENGER_RoomMessage, + handle), + GNUNET_MQ_hd_fixed_size(room_entry, + GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_ENTRY, + struct GNUNET_MESSENGER_RoomMessage, + handle), + GNUNET_MQ_hd_fixed_size(room_close, + GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_CLOSE, + struct GNUNET_MESSENGER_RoomMessage, + handle), + GNUNET_MQ_hd_var_size( + recv_message, + GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_RECV_MESSAGE, + struct GNUNET_MESSENGER_RecvMessage, handle), + GNUNET_MQ_handler_end() }; + + handle->mq = GNUNET_CLIENT_connect (handle->cfg, + GNUNET_MESSENGER_SERVICE_NAME, + handlers, &callback_mq_error, handle); +} + +struct GNUNET_MESSENGER_Handle* +GNUNET_MESSENGER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *name, + GNUNET_MESSENGER_IdentityCallback identity_callback, void *identity_cls, + GNUNET_MESSENGER_MessageCallback msg_callback, void *msg_cls) +{ + struct GNUNET_MESSENGER_Handle *handle = create_handle (cfg, identity_callback, identity_cls, msg_callback, msg_cls); + + reconnect (handle); + + if (handle->mq) + { + const uint16_t name_len = name ? strlen (name) : 0; + + struct GNUNET_MESSENGER_CreateMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg_extra(msg, name_len + 1, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_CREATE); + + char *extra = ((char*) msg) + sizeof(*msg); + + if (name_len) + GNUNET_memcpy(extra, name, name_len); + + extra[name_len] = '\0'; + + GNUNET_MQ_send (handle->mq, env); + return handle; + } + else + { + destroy_handle (handle); + return NULL; + } +} + +int +GNUNET_MESSENGER_update (struct GNUNET_MESSENGER_Handle *handle) +{ + if ((!handle) || (!get_handle_name(handle))) + return GNUNET_SYSERR; + + struct GNUNET_MESSENGER_UpdateMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_UPDATE); + GNUNET_MQ_send (handle->mq, env); + return GNUNET_OK; +} + +void +GNUNET_MESSENGER_disconnect (struct GNUNET_MESSENGER_Handle *handle) +{ + if (!handle) + return; + + struct GNUNET_MESSENGER_DestroyMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_DESTROY); + GNUNET_MQ_send (handle->mq, env); + + destroy_handle (handle); +} + +const char* +GNUNET_MESSENGER_get_name (const struct GNUNET_MESSENGER_Handle *handle) +{ + if (!handle) + return NULL; + + return get_handle_name (handle); +} + +int +GNUNET_MESSENGER_set_name (struct GNUNET_MESSENGER_Handle *handle, const char *name) +{ + if (!handle) + return GNUNET_SYSERR; + + const uint16_t name_len = name ? strlen (name) : 0; + + struct GNUNET_MESSENGER_NameMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg_extra(msg, name_len + 1, GNUNET_MESSAGE_TYPE_MESSENGER_CONNECTION_SET_NAME); + + char *extra = ((char*) msg) + sizeof(*msg); + + if (name_len) + GNUNET_memcpy(extra, name, name_len); + + extra[name_len] = '\0'; + + GNUNET_MQ_send (handle->mq, env); + return GNUNET_YES; +} + +const struct GNUNET_IDENTITY_PublicKey* +GNUNET_MESSENGER_get_key (const struct GNUNET_MESSENGER_Handle *handle) +{ + if (!handle) + return NULL; + + return get_handle_key (handle); +} + +struct GNUNET_MESSENGER_Room* +GNUNET_MESSENGER_open_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_Room *room = GNUNET_CONTAINER_multihashmap_get (handle->rooms, key); + + if (!room) + { + room = create_room (handle, key); + + if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (handle->rooms, key, room, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + { + destroy_room (room); + return NULL; + } + } + + send_open_room (handle, room); + return room; +} + +struct GNUNET_MESSENGER_Room* +GNUNET_MESSENGER_entry_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_PeerIdentity *door, + const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_Room *room = GNUNET_CONTAINER_multihashmap_get (handle->rooms, key); + + if (!room) + { + room = create_room (handle, key); + + if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (handle->rooms, key, room, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + { + destroy_room (room); + return NULL; + } + } + + send_entry_room (handle, room, door); + return room; +} + +void +GNUNET_MESSENGER_close_room (struct GNUNET_MESSENGER_Room *room) +{ + send_close_room (room->handle, room); +} + +struct GNUNET_MESSENGER_Contact* +GNUNET_MESSENGER_get_member (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_ShortHashCode *id) +{ + return GNUNET_CONTAINER_multishortmap_get (room->members, id); +} + +const char* +GNUNET_MESSENGER_contact_get_name (const struct GNUNET_MESSENGER_Contact *contact) +{ + if (!contact) + return NULL; + + return get_contact_name (contact); +} + +const struct GNUNET_IDENTITY_PublicKey* +GNUNET_MESSENGER_contact_get_key (const struct GNUNET_MESSENGER_Contact *contact) +{ + if (!contact) + return NULL; + + return get_contact_key (contact); +} + +void +GNUNET_MESSENGER_send_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message) +{ + const uint16_t length = get_message_size (message); + + struct GNUNET_MESSENGER_SendMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg_extra(msg, length, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_SEND_MESSAGE); + + GNUNET_memcpy(&(msg->key), &(room->key), sizeof(room->key)); + + char *buffer = ((char*) msg) + sizeof(*msg); + encode_message (message, length, buffer); + + GNUNET_MQ_send (room->handle->mq, env); +} + +const struct GNUNET_MESSENGER_Message* +GNUNET_MESSENGER_get_message (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_HashCode *hash) +{ + const struct GNUNET_MESSENGER_Message *message = get_room_message (room, hash); + + if (!message) + { + struct GNUNET_MESSENGER_RecvMessage *msg; + struct GNUNET_MQ_Envelope *env; + + env = GNUNET_MQ_msg(msg, GNUNET_MESSAGE_TYPE_MESSENGER_ROOM_GET_MESSAGE); + GNUNET_memcpy(&(msg->key), &(room->key), sizeof(room->key)); + GNUNET_memcpy(&(msg->hash), hash, sizeof(*hash)); + GNUNET_MQ_send (room->handle->mq, env); + } + + return message; +} diff --git a/src/messenger/messenger_api_contact.c b/src/messenger/messenger_api_contact.c new file mode 100644 index 000000000..9a242aa00 --- /dev/null +++ b/src/messenger/messenger_api_contact.c @@ -0,0 +1,78 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_contact.c + * @brief messenger api: client implementation of GNUnet MESSENGER service + */ + +#include "messenger_api_contact.h" + +struct GNUNET_MESSENGER_Contact* +create_contact (const struct GNUNET_IDENTITY_PublicKey *key) +{ + struct GNUNET_MESSENGER_Contact *contact = GNUNET_new(struct GNUNET_MESSENGER_Contact); + + contact->name = NULL; + + GNUNET_memcpy(&(contact->public_key), key, sizeof(contact->public_key)); + + return contact; +} + +void +destroy_contact (struct GNUNET_MESSENGER_Contact *contact) +{ + if (contact->name) + GNUNET_free(contact->name); + + GNUNET_free(contact); +} + +const char* +get_contact_name (const struct GNUNET_MESSENGER_Contact *contact) +{ + return contact->name; +} + +void +set_contact_name (struct GNUNET_MESSENGER_Contact *contact, const char *name) +{ + if (contact->name) + GNUNET_free(contact->name); + + contact->name = name? GNUNET_strdup(name) : NULL; +} + +const struct GNUNET_IDENTITY_PublicKey* +get_contact_key (const struct GNUNET_MESSENGER_Contact *contact) +{ + return &(contact->public_key); +} + +const struct GNUNET_HashCode* +get_contact_id_from_key (const struct GNUNET_MESSENGER_Contact *contact) +{ + static struct GNUNET_HashCode id; + + GNUNET_CRYPTO_hash (&(contact->public_key), sizeof(contact->public_key), &id); + + return &id; +} diff --git a/src/messenger/messenger_api_contact.h b/src/messenger/messenger_api_contact.h new file mode 100644 index 000000000..0673b9b85 --- /dev/null +++ b/src/messenger/messenger_api_contact.h @@ -0,0 +1,93 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_contact.h + * @brief messenger api: client implementation of GNUnet MESSENGER service + */ + +#ifndef GNUNET_MESSENGER_API_CONTACT_H +#define GNUNET_MESSENGER_API_CONTACT_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" + +struct GNUNET_MESSENGER_Contact +{ + char *name; + + struct GNUNET_IDENTITY_PublicKey public_key; +}; + +/** + * Creates and allocates a new contact with a given public key from an EGO. + * + * @param key Public key + * @return New contact + */ +struct GNUNET_MESSENGER_Contact* +create_contact (const struct GNUNET_IDENTITY_PublicKey *key); + +/** + * Destroys a contact and frees its memory fully. + * + * @param contact Contact + */ +void +destroy_contact (struct GNUNET_MESSENGER_Contact *contact); + +/** + * Returns the current name of a given contact or NULL if no valid name was assigned yet. + * + * @param contact Contact + * @return Name of the contact or NULL + */ +const char* +get_contact_name (const struct GNUNET_MESSENGER_Contact *contact); + +/** + * Changes the current name of a given contact by copying it from the parameter name. + * + * @param contact Contact + * @param name Valid name (may not be NULL!) + */ +void +set_contact_name (struct GNUNET_MESSENGER_Contact *contact, const char *name); + +/** + * Returns the public key of a given contact. + * + * @param contact Contact + * @return Public key of the contact + */ +const struct GNUNET_IDENTITY_PublicKey* +get_contact_key (const struct GNUNET_MESSENGER_Contact *contact); + +/** + * Returns the resulting hashcode of the public key from a given contact. + * + * @param contact Contact + * @return Hash of the contacts public key + */ +const struct GNUNET_HashCode* +get_contact_id_from_key (const struct GNUNET_MESSENGER_Contact *contact); + +#endif //GNUNET_MESSENGER_API_CONTACT_H diff --git a/src/messenger/messenger_api_ego.h b/src/messenger/messenger_api_ego.h new file mode 100644 index 000000000..c60eeac50 --- /dev/null +++ b/src/messenger/messenger_api_ego.h @@ -0,0 +1,38 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_ego.h + * @brief GNUnet MESSENGER service + */ + +#ifndef GNUNET_MESSENGER_API_EGO_H +#define GNUNET_MESSENGER_API_EGO_H + +#include "platform.h" +#include "gnunet_identity_service.h" + +struct GNUNET_MESSENGER_Ego +{ + struct GNUNET_IDENTITY_PrivateKey priv; + struct GNUNET_IDENTITY_PublicKey pub; +}; + +#endif //GNUNET_MESSENGER_API_EGO_H diff --git a/src/messenger/messenger_api_handle.c b/src/messenger/messenger_api_handle.c new file mode 100644 index 000000000..20ef77254 --- /dev/null +++ b/src/messenger/messenger_api_handle.c @@ -0,0 +1,213 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_handle.c + * @brief messenger api: client implementation of GNUnet MESSENGER service + */ + +#include "messenger_api_handle.h" + +struct GNUNET_MESSENGER_Handle* +create_handle (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_MESSENGER_IdentityCallback identity_callback, + void *identity_cls, GNUNET_MESSENGER_MessageCallback msg_callback, void *msg_cls) +{ + struct GNUNET_MESSENGER_Handle *handle = GNUNET_new(struct GNUNET_MESSENGER_Handle); + + handle->cfg = cfg; + handle->mq = NULL; + + handle->identity_callback = identity_callback; + handle->identity_cls = identity_cls; + + handle->msg_callback = msg_callback; + handle->msg_cls = msg_cls; + + handle->name = NULL; + handle->pubkey = NULL; + + handle->reconnect_time = GNUNET_TIME_relative_get_zero_ (); + handle->reconnect_task = NULL; + + handle->rooms = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + handle->contacts = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + + return handle; +} + +static int +iterate_destroy_room (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_Room *room = value; + + destroy_room (room); + + return GNUNET_YES; +} + +static int +iterate_destroy_contact (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_Contact *contact = value; + + destroy_contact (contact); + + return GNUNET_YES; +} + +void +destroy_handle (struct GNUNET_MESSENGER_Handle *handle) +{ + if (handle->reconnect_task) + GNUNET_SCHEDULER_cancel (handle->reconnect_task); + + if (handle->mq) + GNUNET_MQ_destroy (handle->mq); + + if (handle->name) + GNUNET_free(handle->name); + + if (handle->pubkey) + GNUNET_free(handle->pubkey); + + if (handle->rooms) + { + GNUNET_CONTAINER_multihashmap_iterate (handle->rooms, iterate_destroy_room, NULL); + + GNUNET_CONTAINER_multihashmap_destroy (handle->rooms); + } + + if (handle->contacts) + { + GNUNET_CONTAINER_multihashmap_iterate (handle->contacts, iterate_destroy_contact, NULL); + + GNUNET_CONTAINER_multihashmap_destroy (handle->contacts); + } + + GNUNET_free(handle->name); +} + +void +set_handle_name (struct GNUNET_MESSENGER_Handle *handle, const char *name) +{ + if (handle->name) + GNUNET_free(handle->name); + + handle->name = name? GNUNET_strdup(name) : NULL; +} + +const char* +get_handle_name (const struct GNUNET_MESSENGER_Handle *handle) +{ + return handle->name; +} + +void +set_handle_key (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_IDENTITY_PublicKey *pubkey) +{ + if (!handle->pubkey) + handle->pubkey = GNUNET_new(struct GNUNET_IDENTITY_PublicKey); + + GNUNET_memcpy(handle->pubkey, pubkey, sizeof(*pubkey)); +} + +const struct GNUNET_IDENTITY_PublicKey* +get_handle_key (const struct GNUNET_MESSENGER_Handle *handle) +{ + if (!handle->pubkey) + { + struct GNUNET_IDENTITY_Ego *anonymous = GNUNET_IDENTITY_ego_get_anonymous (); + static struct GNUNET_IDENTITY_PublicKey pubkey; + + GNUNET_IDENTITY_ego_get_public_key (anonymous, &pubkey); + + return &pubkey; + } + + return handle->pubkey; +} + +struct GNUNET_MESSENGER_Contact* +get_handle_contact_by_pubkey (const struct GNUNET_MESSENGER_Handle *handle, + const struct GNUNET_IDENTITY_PublicKey *pubkey) +{ + struct GNUNET_HashCode hash; + + GNUNET_CRYPTO_hash (pubkey, sizeof(*pubkey), &hash); + + struct GNUNET_MESSENGER_Contact *contact = GNUNET_CONTAINER_multihashmap_get (handle->contacts, &hash); + + if (contact) + return contact; + + contact = create_contact (pubkey); + + if (GNUNET_OK == GNUNET_CONTAINER_multihashmap_put (handle->contacts, &hash, contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + return contact; + + destroy_contact (contact); + return NULL; +} + +void +swap_handle_contact_by_pubkey (struct GNUNET_MESSENGER_Handle *handle, struct GNUNET_MESSENGER_Contact *contact, + const struct GNUNET_IDENTITY_PublicKey *pubkey) +{ + const struct GNUNET_HashCode *hash = get_contact_id_from_key (contact); + + if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (handle->contacts, hash, contact)) + { + GNUNET_memcpy(&(contact->public_key), pubkey, sizeof(*pubkey)); + + hash = get_contact_id_from_key (contact); + + GNUNET_CONTAINER_multihashmap_put (handle->contacts, hash, contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); + } +} + +void +open_handle_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_Room *room = GNUNET_CONTAINER_multihashmap_get (handle->rooms, key); + + if (room) + room->opened = GNUNET_YES; +} + +void +entry_handle_room_at (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_PeerIdentity *door, + const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_Room *room = GNUNET_CONTAINER_multihashmap_get (handle->rooms, key); + + if (room) + add_to_list_tunnels (&(room->entries), door); +} + +void +close_handle_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_Room *room = GNUNET_CONTAINER_multihashmap_get (handle->rooms, key); + + if ((room) && (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (handle->rooms, key, room))) + destroy_room (room); +} diff --git a/src/messenger/messenger_api_handle.h b/src/messenger/messenger_api_handle.h new file mode 100644 index 000000000..d6cde0106 --- /dev/null +++ b/src/messenger/messenger_api_handle.h @@ -0,0 +1,174 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_handle.h + * @brief messenger api: client implementation of GNUnet MESSENGER service + */ + +#ifndef GNUNET_MESSENGER_API_HANDLE_H +#define GNUNET_MESSENGER_API_HANDLE_H + +#include "platform.h" +#include "gnunet_cadet_service.h" +#include "gnunet_container_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" +#include "gnunet_peer_lib.h" + +#include "gnunet_messenger_service.h" + +#include "messenger_api_contact.h" +#include "messenger_api_room.h" + +struct GNUNET_MESSENGER_Handle +{ + const struct GNUNET_CONFIGURATION_Handle *cfg; + + struct GNUNET_MQ_Handle *mq; + + GNUNET_MESSENGER_IdentityCallback identity_callback; + void *identity_cls; + + GNUNET_MESSENGER_MessageCallback msg_callback; + void *msg_cls; + + char *name; + struct GNUNET_IDENTITY_PublicKey *pubkey; + + struct GNUNET_TIME_Relative reconnect_time; + struct GNUNET_SCHEDULER_Task *reconnect_task; + + struct GNUNET_CONTAINER_MultiHashMap *rooms; + struct GNUNET_CONTAINER_MultiHashMap *contacts; +}; + +/** + * Creates and allocates a new handle using a given configuration and a custom message callback + * with a given closure for the client API. + * + * @param cfg Configuration + * @param msg_callback Message callback + * @param msg_cls Closure + * @return New handle + */ +struct GNUNET_MESSENGER_Handle* +create_handle (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_MESSENGER_IdentityCallback identity_callback, + void *identity_cls, GNUNET_MESSENGER_MessageCallback msg_callback, void *msg_cls); + +/** + * Destroys a handle and frees its memory fully from the client API. + * + * @param handle Handle + */ +void +destroy_handle (struct GNUNET_MESSENGER_Handle *handle); + +/** + * Sets the name of a handle to a specific name. + * + * @param handle Handle + * @param name New name + */ +void +set_handle_name (struct GNUNET_MESSENGER_Handle *handle, const char *name); + +/** + * Returns the current name of a given handle or NULL if no valid name was assigned yet. + * + * @param handle Handle + * @return Name of the handle or NULL + */ +const char* +get_handle_name (const struct GNUNET_MESSENGER_Handle *handle); + +/** + * Sets the public key of a given handle to a specific public key. + * + * @param handle Handle + * @param pubkey Public key + */ +void +set_handle_key (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_IDENTITY_PublicKey *pubkey); + +/** + * Returns the public key of a given handle. + * + * @param handle Handle + * @return Public key of the handle + */ +const struct GNUNET_IDENTITY_PublicKey* +get_handle_key (const struct GNUNET_MESSENGER_Handle *handle); + +/** + * Returns a contact known to a handle identified by a given public key. If not matching + * contact is found, NULL gets returned. + * + * @param handle Handle + * @param pubkey Public key of EGO + * @return Contact or NULL + */ +struct GNUNET_MESSENGER_Contact* +get_handle_contact_by_pubkey (const struct GNUNET_MESSENGER_Handle *handle, + const struct GNUNET_IDENTITY_PublicKey *pubkey); + +/** + * Changes the public key for a contact known to a handle to a specific public key and + * updates local map entries to access the contact by its updated key. + * + * @param handle Handle + * @param contact Contact + * @param pubkey Public key of EGO + */ +void +swap_handle_contact_by_pubkey (struct GNUNET_MESSENGER_Handle *handle, struct GNUNET_MESSENGER_Contact *contact, + const struct GNUNET_IDENTITY_PublicKey *pubkey); + +/** + * Marks a room known to a handle identified by a given key as open. + * + * @param handle Handle + * @param key Key of room + */ +void +open_handle_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key); + +/** + * Adds a tunnel for a room known to a handle identified by a given key to a + * list of opened connections. + * + * @param handle Handle + * @param door Peer identity + * @param key Key of room + */ +void +entry_handle_room_at (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_PeerIdentity *door, + const struct GNUNET_HashCode *key); + +/** + * Destroys and so implicitly closes a room known to a handle identified by a given key. + * + * @param handle Handle + * @param key Key of room + */ +void +close_handle_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key); + +#endif //GNUNET_MESSENGER_API_HANDLE_H diff --git a/src/messenger/messenger_api_list_tunnels.c b/src/messenger/messenger_api_list_tunnels.c new file mode 100644 index 000000000..13d8c1906 --- /dev/null +++ b/src/messenger/messenger_api_list_tunnels.c @@ -0,0 +1,112 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_list_tunnels.c + * @brief messenger api: client and service implementation of GNUnet MESSENGER service + */ + +#include "messenger_api_list_tunnels.h" + +void +init_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels) +{ + GNUNET_assert(tunnels); + + tunnels->head = NULL; + tunnels->tail = NULL; +} + +void +clear_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels) +{ + GNUNET_assert(tunnels); + + struct GNUNET_MESSENGER_ListTunnel *element; + + for (element = tunnels->head; element; element = tunnels->head) + { + GNUNET_CONTAINER_DLL_remove(tunnels->head, tunnels->tail, element); + GNUNET_PEER_change_rc (element->peer, -1); + GNUNET_free(element); + } + + tunnels->head = NULL; + tunnels->tail = NULL; +} + +static int +compare_list_tunnels (void *cls, struct GNUNET_MESSENGER_ListTunnel *element0, + struct GNUNET_MESSENGER_ListTunnel *element1) +{ + return ((int) element0->peer) - ((int) element1->peer); +} + +void +add_to_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer) +{ + struct GNUNET_MESSENGER_ListTunnel *element = GNUNET_new(struct GNUNET_MESSENGER_ListTunnel); + + element->peer = GNUNET_PEER_intern (peer); + + GNUNET_CONTAINER_DLL_insert_sorted(struct GNUNET_MESSENGER_ListTunnel, compare_list_tunnels, NULL, tunnels->head, + tunnels->tail, element); +} + +struct GNUNET_MESSENGER_ListTunnel* +find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer, size_t *index) +{ + struct GNUNET_MESSENGER_ListTunnel *element; + struct GNUNET_PeerIdentity pid; + + if (index) + *index = 0; + + for (element = tunnels->head; element; element = element->next) + { + GNUNET_PEER_resolve (element->peer, &pid); + + if (0 == GNUNET_memcmp(&pid, peer)) + return element; + + if (index) + (*index) = (*index) + 1; + } + + return NULL; +} + +int +contains_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer) +{ + return find_list_tunnels (tunnels, peer, NULL) != NULL ? GNUNET_YES : GNUNET_NO; +} + +struct GNUNET_MESSENGER_ListTunnel* +remove_from_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, struct GNUNET_MESSENGER_ListTunnel *element) +{ + struct GNUNET_MESSENGER_ListTunnel *next = element->next; + + GNUNET_CONTAINER_DLL_remove(tunnels->head, tunnels->tail, element); + GNUNET_PEER_change_rc (element->peer, -1); + GNUNET_free(element); + + return next; +} diff --git a/src/messenger/messenger_api_list_tunnels.h b/src/messenger/messenger_api_list_tunnels.h new file mode 100644 index 000000000..0240fceb8 --- /dev/null +++ b/src/messenger/messenger_api_list_tunnels.h @@ -0,0 +1,112 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_list_tunnels.h + * @brief messenger api: client and service implementation of GNUnet MESSENGER service + */ + +#ifndef GNUNET_MESSENGER_API_LIST_TUNNELS_H +#define GNUNET_MESSENGER_API_LIST_TUNNELS_H + +#include "platform.h" +#include "gnunet_peer_lib.h" +#include "gnunet_container_lib.h" + +struct GNUNET_MESSENGER_ListTunnel +{ + struct GNUNET_MESSENGER_ListTunnel *prev; + struct GNUNET_MESSENGER_ListTunnel *next; + + GNUNET_PEER_Id peer; +}; + +struct GNUNET_MESSENGER_ListTunnels +{ + struct GNUNET_MESSENGER_ListTunnel *head; + struct GNUNET_MESSENGER_ListTunnel *tail; +}; + +/** + * Initializes list of tunnels peer identities as empty list. + * + * @param tunnels List of peer identities + */ +void +init_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels); + +/** + * Clears the list of tunnels peer identities. + * + * @param tunnels List of peer identities + */ +void +clear_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels); + +/** + * Adds a specific peer from a tunnel to the end of the list. + * + * @param tunnels List of peer identities + * @param peer Peer identity of tunnel + */ +void +add_to_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer); + +/** + * Searches linearly through the list of tunnels peer identities for matching a + * specific peer identity and returns the matching element of the list. + * + * If no matching element is found, NULL gets returned. + * + * If index is not NULL, index will be overriden with the numeric index of + * the found element in the list. If no matching element is found, index will + * contain the total amount of elements in the list. + * + * @param tunnels List of peer identities + * @param peer Peer identity of tunnel + * @param[out] index Index of found element (optional) + * @return Element in the list with matching peer identity + */ +struct GNUNET_MESSENGER_ListTunnel* +find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer, size_t *index); + +/** + * Tests linearly if the list of tunnels peer identities contains a specific + * peer identity and returns GNUNET_YES on success, otherwise GNUNET_NO. + * + * @param tunnels List of peer identities + * @param peer Peer identity of tunnel + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +contains_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer); + +/** + * Removes a specific element from the list of tunnels peer identities and returns + * the next element in the list. + * + * @param tunnels List of peer identities + * @param element Element of the list + * @return Next element in the list + */ +struct GNUNET_MESSENGER_ListTunnel* +remove_from_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, struct GNUNET_MESSENGER_ListTunnel *element); + +#endif //GNUNET_MESSENGER_API_LIST_TUNNELS_H diff --git a/src/messenger/messenger_api_message.c b/src/messenger/messenger_api_message.c new file mode 100644 index 000000000..fdab60eef --- /dev/null +++ b/src/messenger/messenger_api_message.c @@ -0,0 +1,602 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_message.c + * @brief messenger api: client and service implementation of GNUnet MESSENGER service + */ + +#include "messenger_api_message.h" + +struct GNUNET_MESSENGER_MessageSignature +{ + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + struct GNUNET_HashCode hash; +}; + +struct GNUNET_MESSENGER_ShortMessage +{ + enum GNUNET_MESSENGER_MessageKind kind; + struct GNUNET_MESSENGER_MessageBody body; +}; + +struct GNUNET_MESSENGER_Message* +create_message (enum GNUNET_MESSENGER_MessageKind kind) +{ + struct GNUNET_MESSENGER_Message *message = GNUNET_new(struct GNUNET_MESSENGER_Message); + + message->header.kind = kind; + + switch (message->header.kind) + { + case GNUNET_MESSENGER_KIND_NAME: + message->body.name.name = NULL; + break; + case GNUNET_MESSENGER_KIND_TEXT: + message->body.text.text = NULL; + break; + case GNUNET_MESSENGER_KIND_FILE: + message->body.file.uri = NULL; + break; + case GNUNET_MESSENGER_KIND_PRIVATE: + message->body.private.length = 0; + message->body.private.data = NULL; + break; + default: + break; + } + + return message; +} + +struct GNUNET_MESSENGER_Message* +copy_message (const struct GNUNET_MESSENGER_Message *message) +{ + struct GNUNET_MESSENGER_Message *copy = GNUNET_new(struct GNUNET_MESSENGER_Message); + + GNUNET_memcpy(copy, message, sizeof(struct GNUNET_MESSENGER_Message)); + + switch (message->header.kind) + { + case GNUNET_MESSENGER_KIND_NAME: + copy->body.name.name = GNUNET_strdup(message->body.name.name); + break; + case GNUNET_MESSENGER_KIND_TEXT: + copy->body.text.text = GNUNET_strdup(message->body.text.text); + break; + case GNUNET_MESSENGER_KIND_FILE: + copy->body.file.uri = GNUNET_strdup(message->body.file.uri); + break; + case GNUNET_MESSENGER_KIND_PRIVATE: + copy->body.private.data = copy->body.private.length ? GNUNET_malloc(copy->body.private.length) : NULL; + + if (copy->body.private.data) + { + GNUNET_memcpy(copy->body.private.data, message->body.private.data, copy->body.private.length); + } + + break; + default: + break; + } + + return copy; +} + +static void +destroy_message_body (enum GNUNET_MESSENGER_MessageKind kind, struct GNUNET_MESSENGER_MessageBody *body) +{ + switch (kind) + { + case GNUNET_MESSENGER_KIND_NAME: + GNUNET_free(body->name.name); + break; + case GNUNET_MESSENGER_KIND_TEXT: + GNUNET_free(body->text.text); + break; + case GNUNET_MESSENGER_KIND_FILE: + GNUNET_free(body->file.uri); + break; + case GNUNET_MESSENGER_KIND_PRIVATE: + GNUNET_free(body->private.data); + break; + default: + break; + } +} + +void +destroy_message (struct GNUNET_MESSENGER_Message *message) +{ + destroy_message_body (message->header.kind, &(message->body)); + + GNUNET_free(message); +} + +static void +fold_short_message (const struct GNUNET_MESSENGER_Message *message, struct GNUNET_MESSENGER_ShortMessage *shortened) +{ + shortened->kind = message->header.kind; + + GNUNET_memcpy(&(shortened->body), &(message->body), sizeof(struct GNUNET_MESSENGER_MessageBody)); +} + +static void +unfold_short_message (struct GNUNET_MESSENGER_ShortMessage *shortened, struct GNUNET_MESSENGER_Message *message) +{ + destroy_message_body (message->header.kind, &(message->body)); + + message->header.kind = shortened->kind; + + GNUNET_memcpy(&(message->body), &(shortened->body), sizeof(struct GNUNET_MESSENGER_MessageBody)); +} + +#define member_size(type, member) sizeof(((type*) NULL)->member) + +static uint16_t +get_message_body_kind_size (enum GNUNET_MESSENGER_MessageKind kind) +{ + uint16_t length = 0; + + switch (kind) + { + case GNUNET_MESSENGER_KIND_INFO: + length += member_size(struct GNUNET_MESSENGER_Message, body.info.host_key); + length += member_size(struct GNUNET_MESSENGER_Message, body.info.unique_id); + break; + case GNUNET_MESSENGER_KIND_JOIN: + length += member_size(struct GNUNET_MESSENGER_Message, body.join.key); + break; + case GNUNET_MESSENGER_KIND_LEAVE: + break; + case GNUNET_MESSENGER_KIND_NAME: + break; + case GNUNET_MESSENGER_KIND_KEY: + length += member_size(struct GNUNET_MESSENGER_Message, body.key.key); + break; + case GNUNET_MESSENGER_KIND_PEER: + length += member_size(struct GNUNET_MESSENGER_Message, body.peer.peer); + break; + case GNUNET_MESSENGER_KIND_ID: + length += member_size(struct GNUNET_MESSENGER_Message, body.id.id); + break; + case GNUNET_MESSENGER_KIND_MISS: + length += member_size(struct GNUNET_MESSENGER_Message, body.miss.peer); + break; + case GNUNET_MESSENGER_KIND_MERGE: + length += member_size(struct GNUNET_MESSENGER_Message, body.merge.previous); + break; + case GNUNET_MESSENGER_KIND_REQUEST: + length += member_size(struct GNUNET_MESSENGER_Message, body.request.hash); + break; + case GNUNET_MESSENGER_KIND_INVITE: + length += member_size(struct GNUNET_MESSENGER_Message, body.invite.door); + length += member_size(struct GNUNET_MESSENGER_Message, body.invite.key); + break; + case GNUNET_MESSENGER_KIND_TEXT: + break; + case GNUNET_MESSENGER_KIND_FILE: + length += member_size(struct GNUNET_MESSENGER_Message, body.file.key); + length += member_size(struct GNUNET_MESSENGER_Message, body.file.hash); + length += NAME_MAX; + break; + case GNUNET_MESSENGER_KIND_PRIVATE: + length += member_size(struct GNUNET_MESSENGER_Message, body.private.key); + break; + default: + break; + } + + return length; +} + +uint16_t +get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind) +{ + uint16_t length = 0; + + length += member_size(struct GNUNET_MESSENGER_Message, header.signature); + length += member_size(struct GNUNET_MESSENGER_Message, header.timestamp); + length += member_size(struct GNUNET_MESSENGER_Message, header.sender_id); + length += member_size(struct GNUNET_MESSENGER_Message, header.previous); + length += member_size(struct GNUNET_MESSENGER_Message, header.kind); + + return length + get_message_body_kind_size (kind); +} + +static uint16_t +get_message_body_size (enum GNUNET_MESSENGER_MessageKind kind, const struct GNUNET_MESSENGER_MessageBody *body) +{ + uint16_t length = 0; + + switch (kind) + { + case GNUNET_MESSENGER_KIND_NAME: + length += (body->name.name? strlen (body->name.name) : 0); + break; + case GNUNET_MESSENGER_KIND_TEXT: + length += strlen (body->text.text); + break; + case GNUNET_MESSENGER_KIND_FILE: + length += strlen (body->file.uri); + break; + case GNUNET_MESSENGER_KIND_PRIVATE: + length += body->private.length; + break; + default: + break; + } + + return length; +} + +uint16_t +get_message_size (const struct GNUNET_MESSENGER_Message *message) +{ + return get_message_kind_size (message->header.kind) + get_message_body_size (message->header.kind, &(message->body)); +} + +static uint16_t +get_short_message_size (const struct GNUNET_MESSENGER_ShortMessage *message) +{ + if (message) + return sizeof(message->kind) + get_message_body_kind_size (message->kind) + + get_message_body_size (message->kind, &(message->body)); + else + return sizeof(message->kind); +} + +#define min(x, y) (x < y? x : y) + +#define encode_step_ext(dst, offset, src, size) do { \ + GNUNET_memcpy(dst + offset, src, size); \ + offset += size; \ +} while (0) + +#define encode_step(dst, offset, src) do { \ + encode_step_ext(dst, offset, src, sizeof(*src)); \ +} while(0) + +static void +encode_message_body (enum GNUNET_MESSENGER_MessageKind kind, const struct GNUNET_MESSENGER_MessageBody *body, + uint16_t length, char *buffer, uint16_t offset) +{ + switch (kind) + { + case GNUNET_MESSENGER_KIND_INFO: + encode_step(buffer, offset, &(body->info.host_key)); + encode_step(buffer, offset, &(body->info.unique_id)); + break; + case GNUNET_MESSENGER_KIND_JOIN: + encode_step(buffer, offset, &(body->join.key)); + break; + case GNUNET_MESSENGER_KIND_LEAVE: + break; + case GNUNET_MESSENGER_KIND_NAME: + if (body->name.name) + encode_step_ext(buffer, offset, body->name.name, min(length - offset, strlen(body->name.name))); + break; + case GNUNET_MESSENGER_KIND_KEY: + encode_step(buffer, offset, &(body->key.key)); + break; + case GNUNET_MESSENGER_KIND_PEER: + encode_step(buffer, offset, &(body->peer.peer)); + break; + case GNUNET_MESSENGER_KIND_ID: + encode_step(buffer, offset, &(body->id.id)); + break; + case GNUNET_MESSENGER_KIND_MISS: + encode_step(buffer, offset, &(body->miss.peer)); + break; + case GNUNET_MESSENGER_KIND_MERGE: + encode_step(buffer, offset, &(body->merge.previous)); + break; + case GNUNET_MESSENGER_KIND_REQUEST: + encode_step(buffer, offset, &(body->request.hash)); + break; + case GNUNET_MESSENGER_KIND_INVITE: + encode_step(buffer, offset, &(body->invite.door)); + encode_step(buffer, offset, &(body->invite.key)); + break; + case GNUNET_MESSENGER_KIND_TEXT: + encode_step_ext(buffer, offset, body->text.text, min(length - offset, strlen(body->text.text))); + break; + case GNUNET_MESSENGER_KIND_FILE: + encode_step(buffer, offset, &(body->file.key)); + encode_step(buffer, offset, &(body->file.hash)); + encode_step_ext(buffer, offset, body->file.name, NAME_MAX); + encode_step_ext(buffer, offset, body->file.uri, min(length - offset, strlen(body->file.uri))); + break; + case GNUNET_MESSENGER_KIND_PRIVATE: + encode_step(buffer, offset, &(body->private.key)); + encode_step_ext(buffer, offset, body->private.data, min(length - offset, body->private.length)); + break; + default: + break; + } +} + +void +encode_message (const struct GNUNET_MESSENGER_Message *message, uint16_t length, char *buffer) +{ + uint16_t offset = 0; + + encode_step(buffer, offset, &(message->header.signature)); + encode_step(buffer, offset, &(message->header.timestamp)); + encode_step(buffer, offset, &(message->header.sender_id)); + encode_step(buffer, offset, &(message->header.previous)); + encode_step(buffer, offset, &(message->header.kind)); + + encode_message_body (message->header.kind, &(message->body), length, buffer, offset); +} + +static void +encode_short_message (const struct GNUNET_MESSENGER_ShortMessage *message, uint16_t length, char *buffer) +{ + uint16_t offset = 0; + + encode_step(buffer, offset, &(message->kind)); + + encode_message_body (message->kind, &(message->body), length, buffer, offset); +} + +#define decode_step_ext(src, offset, dst, size) do { \ + GNUNET_memcpy(dst, src + offset, size); \ + offset += size; \ +} while (0) + +#define decode_step(src, offset, dst) do { \ + decode_step_ext(src, offset, dst, sizeof(*dst)); \ +} while (0) + +#define decode_step_malloc(src, offset, dst, size, zero) do { \ + dst = GNUNET_malloc(size + zero); \ + if (zero) dst[size] = 0; \ + decode_step_ext(src, offset, dst, size); \ +} while (0) + +static void +decode_message_body (enum GNUNET_MESSENGER_MessageKind *kind, struct GNUNET_MESSENGER_MessageBody *body, + uint16_t length, const char *buffer, uint16_t offset) +{ + switch (*kind) + { + case GNUNET_MESSENGER_KIND_INFO: + decode_step(buffer, offset, &(body->info.host_key)); + decode_step(buffer, offset, &(body->info.unique_id)); + break; + case GNUNET_MESSENGER_KIND_JOIN: + decode_step(buffer, offset, &(body->join.key)); + break; + case GNUNET_MESSENGER_KIND_LEAVE: + break; + case GNUNET_MESSENGER_KIND_NAME: + if (length - offset > 0) + decode_step_malloc(buffer, offset, body->name.name, length - offset, 1); + else + body->name.name = NULL; + break; + case GNUNET_MESSENGER_KIND_KEY: + decode_step(buffer, offset, &(body->key.key)); + break; + case GNUNET_MESSENGER_KIND_PEER: + decode_step(buffer, offset, &(body->peer.peer)); + break; + case GNUNET_MESSENGER_KIND_ID: + decode_step(buffer, offset, &(body->id.id)); + break; + case GNUNET_MESSENGER_KIND_MISS: + decode_step(buffer, offset, &(body->miss.peer)); + break; + case GNUNET_MESSENGER_KIND_MERGE: + decode_step(buffer, offset, &(body->merge.previous)); + break; + case GNUNET_MESSENGER_KIND_REQUEST: + decode_step(buffer, offset, &(body->request.hash)); + break; + case GNUNET_MESSENGER_KIND_INVITE: + decode_step(buffer, offset, &(body->invite.door)); + decode_step(buffer, offset, &(body->invite.key)); + break; + case GNUNET_MESSENGER_KIND_TEXT: + decode_step_malloc(buffer, offset, body->text.text, length - offset, 1); + break; + case GNUNET_MESSENGER_KIND_FILE: + decode_step(buffer, offset, &(body->file.key)); + decode_step(buffer, offset, &(body->file.hash)); + decode_step_ext(buffer, offset, body->file.name, NAME_MAX); + decode_step_malloc(buffer, offset, body->file.uri, length - offset, 1); + break; + case GNUNET_MESSENGER_KIND_PRIVATE: + decode_step(buffer, offset, &(body->private.key)); + + body->private.length = (length - offset); + decode_step_malloc(buffer, offset, body->private.data, length - offset, 0); + break; + default: + *kind = GNUNET_MESSENGER_KIND_UNKNOWN; + break; + } +} + +int +decode_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, const char *buffer) +{ + uint16_t offset = 0; + + if (length < get_message_kind_size (GNUNET_MESSENGER_KIND_UNKNOWN)) + return GNUNET_NO; + + decode_step(buffer, offset, &(message->header.signature)); + decode_step(buffer, offset, &(message->header.timestamp)); + decode_step(buffer, offset, &(message->header.sender_id)); + decode_step(buffer, offset, &(message->header.previous)); + decode_step(buffer, offset, &(message->header.kind)); + + if (length < get_message_kind_size (message->header.kind)) + return GNUNET_NO; + + decode_message_body (&(message->header.kind), &(message->body), length, buffer, offset); + + return GNUNET_YES; +} + +static int +decode_short_message (struct GNUNET_MESSENGER_ShortMessage *message, uint16_t length, const char *buffer) +{ + uint16_t offset = 0; + + if (length < get_short_message_size (NULL)) + return GNUNET_NO; + + decode_step(buffer, offset, &(message->kind)); + + if (length < get_short_message_size (message)) + return GNUNET_NO; + + decode_message_body (&(message->kind), &(message->body), length, buffer, offset); + + return GNUNET_YES; +} + +void +hash_message (uint16_t length, const char *buffer, struct GNUNET_HashCode *hash) +{ + GNUNET_CRYPTO_hash (buffer + sizeof(struct GNUNET_CRYPTO_EcdsaSignature), + length - sizeof(struct GNUNET_CRYPTO_EcdsaSignature), hash); +} + +void +sign_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, char *buffer, + const struct GNUNET_HashCode *hash, const struct GNUNET_MESSENGER_Ego *ego) +{ + struct GNUNET_MESSENGER_MessageSignature signature; + + signature.purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_CHAT_MESSAGE); + signature.purpose.size = htonl (sizeof(signature)); + + GNUNET_memcpy(&(signature.hash), hash, sizeof(struct GNUNET_HashCode)); + + GNUNET_IDENTITY_sign(&(ego->priv), &signature, &(message->header.signature)); + GNUNET_memcpy(buffer, &(message->header.signature), sizeof(struct GNUNET_CRYPTO_EcdsaSignature)); +} + +int +verify_message (const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash, + const struct GNUNET_IDENTITY_PublicKey *key) +{ + struct GNUNET_MESSENGER_MessageSignature signature; + + signature.purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_CHAT_MESSAGE); + signature.purpose.size = htonl (sizeof(signature)); + + GNUNET_memcpy(&(signature.hash), hash, sizeof(struct GNUNET_HashCode)); + + return GNUNET_IDENTITY_signature_verify(GNUNET_SIGNATURE_PURPOSE_CHAT_MESSAGE, &signature, + &(message->header.signature), key); +} + +int +encrypt_message (struct GNUNET_MESSENGER_Message *message, const struct GNUNET_IDENTITY_PublicKey *key) +{ + struct GNUNET_MESSENGER_ShortMessage shortened; + + fold_short_message (message, &shortened); + + const uint16_t length = get_short_message_size (&shortened); + + message->header.kind = GNUNET_MESSENGER_KIND_PRIVATE; + message->body.private.data = GNUNET_malloc(length); + + encode_short_message (&shortened, length, message->body.private.data); + + if (GNUNET_IDENTITY_encrypt (message->body.private.data, length, key, &(message->body.private.key), + message->body.private.data) + == length) + { + destroy_message_body (shortened.kind, &(shortened.body)); + return GNUNET_YES; + } + else + { + unfold_short_message (&shortened, message); + return GNUNET_NO; + } +} + +int +decrypt_message (struct GNUNET_MESSENGER_Message *message, const struct GNUNET_IDENTITY_PrivateKey *key) +{ + if (message->body.private.length != GNUNET_IDENTITY_decrypt (message->body.private.data, + message->body.private.length, key, + &(message->body.private.key), + message->body.private.data)) + return GNUNET_NO; + + struct GNUNET_MESSENGER_ShortMessage shortened; + + if (GNUNET_YES != decode_short_message (&shortened, message->body.private.length, message->body.private.data)) + return GNUNET_NO; + + unfold_short_message (&shortened, message); + return GNUNET_YES; +} + +struct GNUNET_MQ_Envelope* +pack_message (struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, + const struct GNUNET_MESSENGER_Ego *ego, int mode) +{ + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Packing message: %u\n", message->header.kind); + + struct GNUNET_MessageHeader *header; + + uint16_t length = get_message_size (message); + + struct GNUNET_MQ_Envelope *env; + char *buffer; + + if (GNUNET_MESSENGER_PACK_MODE_ENVELOPE == mode) + { + env = GNUNET_MQ_msg_extra(header, length, GNUNET_MESSAGE_TYPE_CADET_CLI); + + buffer = (char*) &(header[1]); + } + else + { + env = NULL; + + buffer = GNUNET_malloc(length); + } + + encode_message (message, length, buffer); + + if (hash) + { + hash_message (length, buffer, hash); + + if (ego) + sign_message (message, length, buffer, hash, ego); + } + + if (GNUNET_MESSENGER_PACK_MODE_ENVELOPE != mode) + GNUNET_free(buffer); + + return env; +} diff --git a/src/messenger/messenger_api_message.h b/src/messenger/messenger_api_message.h new file mode 100644 index 000000000..0f0a97e9c --- /dev/null +++ b/src/messenger/messenger_api_message.h @@ -0,0 +1,190 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_message.h + * @brief messenger api: client and service implementation of GNUnet MESSENGER service + */ + +#ifndef GNUNET_MESSENGER_API_MESSAGE_H +#define GNUNET_MESSENGER_API_MESSAGE_H + +#include "platform.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_identity_service.h" +#include "gnunet_mq_lib.h" +#include "gnunet_signatures.h" + +#include "gnunet_messenger_service.h" + +#include "messenger_api_ego.h" + +/** + * Creates and allocates a new message with a specific kind. + * + * @param kind Kind of message + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message (enum GNUNET_MESSENGER_MessageKind kind); + +/** + * Creates and allocates a copy of a given message. + * + * @param message Message + * @return New message + */ +struct GNUNET_MESSENGER_Message* +copy_message (const struct GNUNET_MESSENGER_Message *message); + +/** + * Destroys a message and frees its memory fully. + * + * @param message Message + */ +void +destroy_message (struct GNUNET_MESSENGER_Message *message); + +/** + * Returns the minimal size in bytes to encode a message of a specific kind. + * + * @param kind Kind of message + * @return Minimal size to encode + */ +uint16_t +get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind); + +/** + * Returns the exact size in bytes to encode a given message. + * + * @param message Message + * @return Size to encode + */ +uint16_t +get_message_size (const struct GNUNET_MESSENGER_Message *message); + +/** + * Encodes a given message into a buffer of a maximal length in bytes. + * + * @param message Message + * @param length Maximal length to encode + * @param[out] buffer Buffer + */ +void +encode_message (const struct GNUNET_MESSENGER_Message *message, uint16_t length, char *buffer); + +/** + * Decodes a message from a given buffer of a maximal length in bytes. + * + * If the buffer is too small for a message of its decoded kind the function fails with + * resulting GNUNET_NO after decoding only the messages header. + * + * On success the function returns GNUNET_YES. + * + * @param[out] message Message + * @param length Maximal length to decode + * @param buffer Buffer + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +decode_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, const char *buffer); + +/** + * Calculates a hash of a given buffer of a length in bytes. + * + * @param length Length of buffer + * @param buffer Buffer + * @param[out] hash Hash + */ +void +hash_message (uint16_t length, const char *buffer, struct GNUNET_HashCode *hash); + +/** + * Signs the hash of a message with a given ego and writes the signature + * into the buffer as well. + * + * @param[out] message Message + * @param length Length of buffer + * @param[out] buffer Buffer + * @param hash Hash of message + * @param ego EGO + */ +void +sign_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, char *buffer, + const struct GNUNET_HashCode *hash, const struct GNUNET_MESSENGER_Ego *ego); + +/** + * Verifies the signature of a given message and its hash with a specific + * public key. The function returns GNUNET_OK if the signature was valid, otherwise + * GNUNET_SYSERR. + * + * @param message Message + * @param hash Hash of message + * @param key Public key of EGO + * @return GNUNET_OK on success, otherwise GNUNET_SYSERR + */ +int +verify_message (const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash, + const struct GNUNET_IDENTITY_PublicKey *key); + +/** + * Encrypts a message using a given public key and replaces its body + * and kind with the now private encrypted message. The function returns + * GNUNET_YES if the operation succeeded, otherwise GNUNET_NO. + * + * @param message Message + * @param key Public key of EGO + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +encrypt_message (struct GNUNET_MESSENGER_Message *message, const struct GNUNET_IDENTITY_PublicKey *key); + +/** + * Decrypts a private message using a given private key and replaces its body + * and kind with the inner encrypted message. The function returns GNUNET_YES if the + * operation succeeded, otherwise GNUNET_NO. + * + * @param message Message + * @param key Private key of EGO + * @return GNUNET_YES on success, otherwise GNUNET_NO + */ +int +decrypt_message (struct GNUNET_MESSENGER_Message *message, const struct GNUNET_IDENTITY_PrivateKey *key); + +#define GNUNET_MESSENGER_PACK_MODE_ENVELOPE 0x1 +#define GNUNET_MESSENGER_PACK_MODE_UNKNOWN 0x0 + +/** + * Encodes the message to pack it into a newly allocated envelope if mode + * is equal to GNUNET_MESSENGER_PACK_MODE_ENVELOPE. Independent of the mode the message + * will be hashed if hash is not NULL and it will be signed if the ego is + * not NULL. + * + * @param[out] message Message + * @param[out] hash Hash of message + * @param ego EGO to sign + * @param mode Mode of packing + * @return Envelope or NULL + */ +struct GNUNET_MQ_Envelope* +pack_message (struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, + const struct GNUNET_MESSENGER_Ego *ego, int mode); + +#endif //GNUNET_MESSENGER_API_MESSAGE_H diff --git a/src/messenger/messenger_api_room.c b/src/messenger/messenger_api_room.c new file mode 100644 index 000000000..5fedf1a78 --- /dev/null +++ b/src/messenger/messenger_api_room.c @@ -0,0 +1,189 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_room.c + * @brief messenger api: client implementation of GNUnet MESSENGER service + */ + +#include "messenger_api_room.h" + +#include "messenger_api_handle.h" + +struct GNUNET_MESSENGER_Room* +create_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key) +{ + struct GNUNET_MESSENGER_Room *room = GNUNET_new(struct GNUNET_MESSENGER_Room); + + room->handle = handle; + GNUNET_memcpy(&(room->key), key, sizeof(*key)); + + room->opened = GNUNET_NO; + room->contact_id = NULL; + + room->members = GNUNET_CONTAINER_multishortmap_create (8, GNUNET_NO); + + init_list_tunnels (&(room->entries)); + + room->messages = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); + + return room; +} + +static int +iterate_destroy_message (void *cls, const struct GNUNET_HashCode *key, void *value) +{ + struct GNUNET_MESSENGER_Message *message = value; + + destroy_message (message); + + return GNUNET_YES; +} + +void +destroy_room (struct GNUNET_MESSENGER_Room *room) +{ + if (room->members) + GNUNET_CONTAINER_multishortmap_destroy (room->members); + + clear_list_tunnels (&(room->entries)); + + if (room->messages) + { + GNUNET_CONTAINER_multihashmap_iterate (room->messages, iterate_destroy_message, NULL); + + GNUNET_CONTAINER_multihashmap_destroy (room->messages); + } + + if (room->contact_id) + GNUNET_free(room->contact_id); + + GNUNET_free(room); +} + +const struct GNUNET_MESSENGER_Message* +get_room_message (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_HashCode *hash) +{ + return GNUNET_CONTAINER_multihashmap_get (room->messages, hash); +} + +static void +handle_join_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_Contact *contact = get_handle_contact_by_pubkey (room->handle, &(message->body.join.key)); + + if (contact) + GNUNET_CONTAINER_multishortmap_put (room->members, &(message->header.sender_id), contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); +} + +static void +handle_leave_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + GNUNET_CONTAINER_multishortmap_remove_all (room->members, &(message->header.sender_id)); +} + +static void +handle_name_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_Contact *contact = GNUNET_CONTAINER_multishortmap_get (room->members, + &(message->header.sender_id)); + + if (contact) + set_contact_name (contact, message->body.name.name); +} + +static void +handle_key_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_Contact *contact = GNUNET_CONTAINER_multishortmap_get (room->members, + &(message->header.sender_id)); + + if (contact) + swap_handle_contact_by_pubkey (room->handle, contact, &(message->body.key.key)); +} + +static void +handle_id_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + struct GNUNET_MESSENGER_Contact *contact = GNUNET_CONTAINER_multishortmap_get (room->members, + &(message->header.sender_id)); + + if ((contact) && (GNUNET_OK + == GNUNET_CONTAINER_multishortmap_put (room->members, &(message->body.id.id), contact, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))) + GNUNET_CONTAINER_multishortmap_remove (room->members, &(message->header.sender_id), contact); +} + +static void +handle_miss_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + if ((room->contact_id) && (0 == GNUNET_memcmp(&(message->header.sender_id), room->contact_id))) + { + struct GNUNET_MESSENGER_ListTunnel *match = find_list_tunnels (&(room->entries), &(message->body.miss.peer), NULL); + + if (match) + remove_from_list_tunnels (&(room->entries), match); + } +} + +void +handle_room_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + if (GNUNET_NO != GNUNET_CONTAINER_multihashmap_contains (room->messages, hash)) + return; + + switch (message->header.kind) + { + case GNUNET_MESSENGER_KIND_JOIN: + handle_join_message (room, message, hash); + break; + case GNUNET_MESSENGER_KIND_LEAVE: + handle_leave_message (room, message, hash); + break; + case GNUNET_MESSENGER_KIND_NAME: + handle_name_message (room, message, hash); + break; + case GNUNET_MESSENGER_KIND_KEY: + handle_key_message (room, message, hash); + break; + case GNUNET_MESSENGER_KIND_ID: + handle_id_message (room, message, hash); + break; + case GNUNET_MESSENGER_KIND_MISS: + handle_miss_message (room, message, hash); + break; + default: + break; + } + + struct GNUNET_MESSENGER_Message *clone = copy_message (message); + + if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (room->messages, hash, clone, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)) + destroy_message (clone); +} diff --git a/src/messenger/messenger_api_room.h b/src/messenger/messenger_api_room.h new file mode 100644 index 000000000..0038128d8 --- /dev/null +++ b/src/messenger/messenger_api_room.h @@ -0,0 +1,95 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @author Tobias Frisch + * @file src/messenger/messenger_api_room.h + * @brief messenger api: client implementation of GNUnet MESSENGER service + */ + +#ifndef GNUNET_MESSENGER_API_ROOM_H +#define GNUNET_MESSENGER_API_ROOM_H + +#include "platform.h" +#include "gnunet_container_lib.h" +#include "gnunet_crypto_lib.h" + +#include "gnunet_messenger_service.h" + +#include "messenger_api_list_tunnels.h" +#include "messenger_api_contact.h" +#include "messenger_api_message.h" + +struct GNUNET_MESSENGER_Room +{ + struct GNUNET_MESSENGER_Handle *handle; + struct GNUNET_HashCode key; + + int opened; + + struct GNUNET_ShortHashCode *contact_id; + + struct GNUNET_CONTAINER_MultiShortmap *members; + struct GNUNET_MESSENGER_ListTunnels entries; + + struct GNUNET_CONTAINER_MultiHashMap *messages; +}; + +/** + * Creates and allocates a new room for a handle with a given key for the client API. + * + * @param handle Handle + * @param key Key of room + * @return New room + */ +struct GNUNET_MESSENGER_Room* +create_room (struct GNUNET_MESSENGER_Handle *handle, const struct GNUNET_HashCode *key); + +/** + * Destroys a room and frees its memory fully from the client API. + * + * @param room Room + */ +void +destroy_room (struct GNUNET_MESSENGER_Room *room); + +/** + * Returns a message locally stored from a map for a given hash in a room. If no matching + * message is found, NULL gets returned. + * + * @param room Room + * @param hash Hash of message + * @return Message or NULL + */ +const struct GNUNET_MESSENGER_Message* +get_room_message (const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_HashCode *hash); + +/** + * Handles a message with a given hash in a room for the client API to update + * members and its information. The function also stores the message in map locally for access afterwards. + * + * @param room Room + * @param message Message + * @param hash Hash of message + */ +void +handle_room_message (struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash); + +#endif //GNUNET_MESSENGER_API_ROOM_H diff --git a/src/messenger/test_messenger.c b/src/messenger/test_messenger.c new file mode 100644 index 000000000..b42dfe6d9 --- /dev/null +++ b/src/messenger/test_messenger.c @@ -0,0 +1,187 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @file messenger/test_messenger.c + * @author Tobias Frisch + * @brief Test for the messenger service using cadet API. + */ +#include +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_testing_lib.h" +#include "gnunet_messenger_service.h" + +/** + * How long until we really give up on a particular testcase portion? + */ +#define TOTAL_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \ + 60) + +/** + * How long until we give up on any particular operation (and retry)? + */ +#define BASE_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5) + +#define TESTER_NAME "tester" + +static int status = 1; + +static struct GNUNET_SCHEDULER_Task *die_task = NULL; +static struct GNUNET_SCHEDULER_Task *op_task = NULL; + +struct GNUNET_MESSENGER_Handle *messenger = NULL; + +static void +end (void *cls) +{ + die_task = NULL; + + if (op_task) + { + GNUNET_SCHEDULER_cancel (op_task); + op_task = NULL; + } + + if (messenger) + { + GNUNET_MESSENGER_disconnect(messenger); + messenger = NULL; + } + + status = 0; +} + + +static void +end_badly (void *cls) +{ + fprintf (stderr, "Testcase failed (timeout).\n"); + + end (NULL); + status = 1; +} + +static void +end_operation (void *cls) +{ + op_task = NULL; + + fprintf (stderr, "Testcase failed (operation: '%s').\n", cls? (const char*) cls : "unknown"); + + if (die_task) + GNUNET_SCHEDULER_cancel (die_task); + + end (NULL); + status = 1; +} + +static int identity_counter = 0; + +/** + * Function called when an identity is retrieved. + * + * @param cls Closure + * @param handle Handle of messenger service + */ +static void +on_identity (void *cls, struct GNUNET_MESSENGER_Handle *handle) +{ + if (op_task) + { + GNUNET_SCHEDULER_cancel (op_task); + op_task = NULL; + } + + const char* name = GNUNET_MESSENGER_get_name(handle); + + if (0 != strcmp(name, TESTER_NAME)) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "name"); + return; + } + + struct GNUNET_IDENTITY_Ego* ego = GNUNET_IDENTITY_ego_get_anonymous(); + struct GNUNET_IDENTITY_PublicKey anonymous_key; + + GNUNET_IDENTITY_ego_get_public_key(ego, &anonymous_key); + + const struct GNUNET_IDENTITY_PublicKey* key = GNUNET_MESSENGER_get_key(handle); + + if (((!identity_counter) && (0 != GNUNET_memcmp(key, (&anonymous_key)))) || + ((identity_counter) && (0 == GNUNET_memcmp(key, (&anonymous_key))))) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "key"); + return; + } + + if (identity_counter) { + GNUNET_MESSENGER_disconnect(handle); + + op_task = NULL; + messenger = NULL; + + if (die_task) + GNUNET_SCHEDULER_cancel (die_task); + + die_task = GNUNET_SCHEDULER_add_now (&end, NULL); + return; + } + + GNUNET_MESSENGER_update(messenger); + identity_counter++; +} + +/** + * Main function for testcase. + * + * @param cls Closure + * @param cfg Configuration + * @param peer Peer for testing + */ +static void +run (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_TESTING_Peer *peer) +{ + die_task = GNUNET_SCHEDULER_add_delayed (TOTAL_TIMEOUT, &end_badly, NULL); + + identity_counter = 0; + + op_task = GNUNET_SCHEDULER_add_delayed (BASE_TIMEOUT, &end_operation, "connect"); + messenger = GNUNET_MESSENGER_connect(cfg, TESTER_NAME, &on_identity, NULL, NULL, NULL); +} + +/** + * The main function. + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main(int argc, char **argv) +{ + if (0 != GNUNET_TESTING_peer_run("test-messenger", + "test_messenger_api.conf", + &run, NULL)) + return 1; + + return status; +} diff --git a/src/messenger/test_messenger_anonymous.c b/src/messenger/test_messenger_anonymous.c new file mode 100644 index 000000000..e2057acc4 --- /dev/null +++ b/src/messenger/test_messenger_anonymous.c @@ -0,0 +1,179 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @file messenger/test_messenger_anonymous.c + * @author Tobias Frisch + * @brief Test for the messenger service using cadet API. + */ +#include +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_testing_lib.h" +#include "gnunet_messenger_service.h" + +/** + * How long until we really give up on a particular testcase portion? + */ +#define TOTAL_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \ + 60) + +/** + * How long until we give up on any particular operation (and retry)? + */ +#define BASE_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5) + +static int status = 1; + +static struct GNUNET_SCHEDULER_Task *die_task = NULL; +static struct GNUNET_SCHEDULER_Task *op_task = NULL; + +struct GNUNET_MESSENGER_Handle *messenger = NULL; + +static void +end (void *cls) +{ + die_task = NULL; + + if (op_task) + { + GNUNET_SCHEDULER_cancel (op_task); + op_task = NULL; + } + + if (messenger) + { + GNUNET_MESSENGER_disconnect(messenger); + messenger = NULL; + } + + status = 0; +} + + +static void +end_badly (void *cls) +{ + fprintf (stderr, "Testcase failed (timeout).\n"); + + end (NULL); + status = 1; +} + +static void +end_operation (void *cls) +{ + op_task = NULL; + + fprintf (stderr, "Testcase failed (operation: '%s').\n", cls? (const char*) cls : "unknown"); + + if (die_task) + GNUNET_SCHEDULER_cancel (die_task); + + end (NULL); + status = 1; +} + +/** + * Function called when an identity is retrieved. + * + * @param cls Closure + * @param handle Handle of messenger service + */ +static void +on_identity (void *cls, struct GNUNET_MESSENGER_Handle *handle) +{ + if (op_task) + { + GNUNET_SCHEDULER_cancel (op_task); + op_task = NULL; + } + + const char* name = GNUNET_MESSENGER_get_name(handle); + + if (NULL != name) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "name-anonymous"); + return; + } + + if (GNUNET_SYSERR != GNUNET_MESSENGER_update(handle)) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "update-fail"); + return; + } + + struct GNUNET_IDENTITY_Ego* ego = GNUNET_IDENTITY_ego_get_anonymous(); + struct GNUNET_IDENTITY_PublicKey anonymous_key; + + GNUNET_IDENTITY_ego_get_public_key(ego, &anonymous_key); + + const struct GNUNET_IDENTITY_PublicKey* key = GNUNET_MESSENGER_get_key(handle); + + if (0 != GNUNET_memcmp(key, (&anonymous_key))) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "key-anonymous"); + return; + } + + GNUNET_MESSENGER_disconnect(handle); + + messenger = NULL; + + if (die_task) + GNUNET_SCHEDULER_cancel (die_task); + + die_task = GNUNET_SCHEDULER_add_now (&end, NULL); +} + +/** + * Main function for testcase. + * + * @param cls Closure + * @param cfg Configuration + * @param peer Peer for testing + */ +static void +run (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_TESTING_Peer *peer) +{ + die_task = GNUNET_SCHEDULER_add_delayed (TOTAL_TIMEOUT, &end_badly, NULL); + + op_task = GNUNET_SCHEDULER_add_delayed (BASE_TIMEOUT, &end_operation, "connect"); + messenger = GNUNET_MESSENGER_connect(cfg, NULL, &on_identity, NULL, NULL, NULL); +} + +/** + * The main function. + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main(int argc, char **argv) +{ + if (0 != GNUNET_TESTING_peer_run("test-messenger", + "test_messenger_api.conf", + &run, NULL)) + return 1; + + return status; +} diff --git a/src/messenger/test_messenger_comm0.c b/src/messenger/test_messenger_comm0.c new file mode 100644 index 000000000..631b5b2c9 --- /dev/null +++ b/src/messenger/test_messenger_comm0.c @@ -0,0 +1,252 @@ +/* + This file is part of GNUnet. + Copyright (C) 2020 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/** + * @file messenger/test_messenger_comm0.c + * @author Tobias Frisch + * @brief Test for the messenger service using cadet API. + */ +#include +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_testbed_logger_service.h" +#include "gnunet_testbed_service.h" +#include "gnunet_testing_lib.h" +#include "gnunet_messenger_service.h" + +/** + * How long until we really give up on a particular testcase portion? + */ +#define TOTAL_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \ + 60) + +/** + * How long until we give up on any particular operation (and retry)? + */ +#define BASE_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5) + +static int status = 1; + +static struct GNUNET_SCHEDULER_Task *die_task = NULL; +static struct GNUNET_SCHEDULER_Task *op_task = NULL; + +static void +end (void *cls) +{ + die_task = NULL; + + if (op_task) + { + GNUNET_SCHEDULER_cancel (op_task); + op_task = NULL; + } + + GNUNET_SCHEDULER_shutdown (); + status = 0; +} + + +static void +end_badly (void *cls) +{ + fprintf (stderr, "Testcase failed (timeout).\n"); + + end (NULL); + status = 1; +} + +static void +end_operation (void *cls) +{ + op_task = NULL; + + fprintf (stderr, "Testcase failed (operation: '%s').\n", cls? (const char*) cls : "unknown"); + + if (die_task) + GNUNET_SCHEDULER_cancel (die_task); + + end (NULL); + status = 1; +} + +static void +end_error (void *cls) +{ + op_task = NULL; + + fprintf (stderr, "Testcase failed (error: '%s').\n", cls? (const char*) cls : "unknown"); + GNUNET_free(cls); + + if (die_task) + GNUNET_SCHEDULER_cancel (die_task); + + end (NULL); + status = 1; +} + +/** + * Function called whenever a message is received or sent. + * + * @param cls Closure + * @param room Room + * @param message Message + * @param hash Hash of message + */ +static void +on_message (void *cls, const struct GNUNET_MESSENGER_Room *room, const struct GNUNET_MESSENGER_Message *message, + const struct GNUNET_HashCode *hash) +{ + // TODO +} + +/** + * Function called when an identity is retrieved. + * + * @param cls Closure + * @param handle Handle of messenger service + */ +static void +on_identity (void *cls, struct GNUNET_MESSENGER_Handle *handle) +{ + // TODO +} + +static void +on_peer (void *cb_cls, struct GNUNET_TESTBED_Operation *op, + const struct GNUNET_TESTBED_PeerInformation *pinfo, + const char *emsg) +{ + if (emsg) + { + op_task = GNUNET_SCHEDULER_add_now (&end_error, GNUNET_strdup(emsg)); + return; + } + + if (pinfo->pit != GNUNET_TESTBED_PIT_CONFIGURATION) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "config"); + return; + } + + struct GNUNET_MESSENGER_Handle *handle; + struct GNUNET_MESSENGER_Room *room; + + fprintf (stderr, "MSG: connect\n"); + + handle = GNUNET_MESSENGER_connect(pinfo->result.cfg, "tester", &on_identity, NULL, &on_message, NULL); + + struct GNUNET_HashCode hash; + GNUNET_CRYPTO_hash("test", 4, &hash); + + fprintf (stderr, "MSG: open\n"); + + room = GNUNET_MESSENGER_open_room(handle, &hash); + + fprintf (stderr, "MSG: close\n"); + + GNUNET_MESSENGER_close_room(room); + + fprintf (stderr, "MSG: disconnect\n"); + + GNUNET_MESSENGER_disconnect(handle); + + GNUNET_TESTBED_operation_done(op); + +} + +/** + * Main function for a peer of the testcase. + * + * @param cls Closure + * @param event Information about the event + */ +static void +run (void *cls, const struct GNUNET_TESTBED_EventInformation *event) +{ + if (GNUNET_TESTBED_ET_PEER_START != event->type) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "start"); + return; + } + + GNUNET_TESTBED_peer_get_information(event->details.peer_start.peer, + GNUNET_TESTBED_PIT_CONFIGURATION, + on_peer, event->details.peer_start.peer); + + fprintf (stderr, "MSG: barrier\n"); + + GNUNET_TESTBED_barrier_wait("exit", NULL, NULL); + + fprintf (stderr, "MSG: exit\n"); +} + +static void +exit_status (void *cls, const char *name, + struct GNUNET_TESTBED_Barrier *barrier, + enum GNUNET_TESTBED_BarrierStatus status, + const char *emsg) +{ + if (emsg) + { + op_task = GNUNET_SCHEDULER_add_now (&end_error, GNUNET_strdup(emsg)); + return; + } + + if (GNUNET_TESTBED_BARRIERSTATUS_ERROR == status) + { + op_task = GNUNET_SCHEDULER_add_now (&end_operation, "exit"); + return; + } + else if (GNUNET_TESTBED_BARRIERSTATUS_CROSSED == status) + GNUNET_SCHEDULER_add_now(&end, NULL); +} + +static void +init (void *cls, struct GNUNET_TESTBED_RunHandle *h, unsigned int num_peers, + struct GNUNET_TESTBED_Peer **peers, unsigned int links_succeeded, + unsigned int links_failed) +{ + die_task = GNUNET_SCHEDULER_add_delayed (TOTAL_TIMEOUT, &end_badly, NULL); + + struct GNUNET_TESTBED_Controller *controller; + + controller = GNUNET_TESTBED_run_get_controller_handle(h); + + GNUNET_TESTBED_barrier_init(controller, "exit", num_peers, exit_status, NULL); +} + +/** + * The main function. + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main(int argc, char **argv) +{ + if (GNUNET_OK != GNUNET_TESTBED_test_run("test-messenger-comm0", + "test_messenger_api.conf", + 2, 0, + &run, NULL, + &init, NULL)) + return 1; + + return status; +} -- cgit v1.2.3 From 96d7027e6b31acca9106a61d0495c88829dc4c85 Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Fri, 13 Nov 2020 05:37:45 +0900 Subject: -add identity linker flag --- src/messenger/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/messenger/Makefile.am b/src/messenger/Makefile.am index ebe08290e..d9694420b 100644 --- a/src/messenger/Makefile.am +++ b/src/messenger/Makefile.am @@ -62,7 +62,8 @@ gnunet_messenger_SOURCES = \ gnunet_messenger_LDADD = \ libgnunetmessenger_common.la \ libgnunetmessenger.la \ - $(top_builddir)/src/util/libgnunetutil.la + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/identity/libgnunetidentity.la gnunet_messenger_LDFLAGS = \ $(GN_LIBINTL) -- cgit v1.2.3 From 99e61479aec983fca8c835fdeb24c9c840513f63 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Thu, 12 Nov 2020 21:47:52 +0100 Subject: -added more docs for messenger Signed-off-by: TheJackiMonster --- src/include/gnunet_messenger_service.h | 197 ++++++++++++++++++++++++++++++++- 1 file changed, 191 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/include/gnunet_messenger_service.h b/src/include/gnunet_messenger_service.h index 8f5315c30..96d308a01 100644 --- a/src/include/gnunet_messenger_service.h +++ b/src/include/gnunet_messenger_service.h @@ -70,28 +70,81 @@ struct GNUNET_MESSENGER_Contact; */ enum GNUNET_MESSENGER_MessageKind { + /** + * The info kind. The message contains a #GNUNET_MESSENGER_MessageInfo body. + */ GNUNET_MESSENGER_KIND_INFO = 1, + /** + * The join kind. The message contains a #GNUNET_MESSENGER_MessageJoin body. + */ GNUNET_MESSENGER_KIND_JOIN = 2, + + /** + * The leave kind. The message contains a #GNUNET_MESSENGER_MessageLeave body. + */ GNUNET_MESSENGER_KIND_LEAVE = 3, + /** + * The name kind. The message contains a #GNUNET_MESSENGER_MessageName body. + */ GNUNET_MESSENGER_KIND_NAME = 4, + + /** + * The key kind. The message contains a #GNUNET_MESSENGER_MessageKey body. + */ GNUNET_MESSENGER_KIND_KEY = 5, + + /** + * The peer kind. The message contains a #GNUNET_MESSENGER_MessagePeer body. + */ GNUNET_MESSENGER_KIND_PEER = 6, + + /** + * The id kind. The message contains a #GNUNET_MESSENGER_MessageId body. + */ GNUNET_MESSENGER_KIND_ID = 7, + /** + * The miss kind. The message contains a #GNUNET_MESSENGER_MessageMiss body. + */ GNUNET_MESSENGER_KIND_MISS = 8, + + /** + * The merge kind. The message contains a #GNUNET_MESSENGER_MessageMerge body. + */ GNUNET_MESSENGER_KIND_MERGE = 9, + + /** + * The request kind. The message contains a #GNUNET_MESSENGER_MessageRequest body. + */ GNUNET_MESSENGER_KIND_REQUEST = 10, + /** + * The invite kind. The message contains a #GNUNET_MESSENGER_MessageInvite body. + */ GNUNET_MESSENGER_KIND_INVITE = 11, + + /** + * The text kind. The message contains a #GNUNET_MESSENGER_MessageText body. + */ GNUNET_MESSENGER_KIND_TEXT = 12, + + /** + * The file kind. The message contains a #GNUNET_MESSENGER_MessageFile body. + */ GNUNET_MESSENGER_KIND_FILE = 13, + /** + * The private kind. The message contains a #GNUNET_MESSENGER_MessagePrivate body. + */ GNUNET_MESSENGER_KIND_PRIVATE = 14, + /** + * The unknown kind. The message contains an unknown body. + */ GNUNET_MESSENGER_KIND_UNKNOWN = 0 -}__attribute__((__packed__)); +}; /** * Get the name of a message kind. @@ -102,117 +155,242 @@ enum GNUNET_MESSENGER_MessageKind const char* GNUNET_MESSENGER_name_of_kind (enum GNUNET_MESSENGER_MessageKind kind); +/** + * The header of a #GNUNET_MESSENGER_Message. + */ struct GNUNET_MESSENGER_MessageHeader { + /** + * The signature of the senders private key. + */ struct GNUNET_IDENTITY_Signature signature; + /** + * The timestamp of the message. + */ struct GNUNET_TIME_AbsoluteNBO timestamp; + /** + * The senders id inside of the room the message was sent in. + */ struct GNUNET_ShortHashCode sender_id; + + /** + * The hash of the previous message from the senders perspective. + */ struct GNUNET_HashCode previous; + /** + * The kind of the message. + */ enum GNUNET_MESSENGER_MessageKind kind; }; +/** + * An info message body. + */ struct GNUNET_MESSENGER_MessageInfo { + /** + * The senders key to verify its signatures. + */ struct GNUNET_IDENTITY_PublicKey host_key; + + /** + * The new unique id for the receiver in a room. + */ struct GNUNET_ShortHashCode unique_id; }; +/** + * A join message body. + */ struct GNUNET_MESSENGER_MessageJoin { + /** + * The senders public key to verify its signatures. + */ struct GNUNET_IDENTITY_PublicKey key; }; +/** + * A leave message body. + */ struct GNUNET_MESSENGER_MessageLeave { }; +/** + * A name message body. + */ struct GNUNET_MESSENGER_MessageName { + /** + * The new name which replaces the current senders name. + */ char *name; }; +/** + * A key message body. + */ struct GNUNET_MESSENGER_MessageKey { + /** + * The new public key which replaces the current senders public key. + */ struct GNUNET_IDENTITY_PublicKey key; }; +/** + * A peer message body. + */ struct GNUNET_MESSENGER_MessagePeer { + /** + * The peer identity of the sender opening a room. + */ struct GNUNET_PeerIdentity peer; }; +/** + * An id message body. + */ struct GNUNET_MESSENGER_MessageId { + /** + * The new id which will replace the senders id in a room. + */ struct GNUNET_ShortHashCode id; }; +/** + * A miss message body. + */ struct GNUNET_MESSENGER_MessageMiss { + /** + * The peer identity of a disconnected door to a room. + */ struct GNUNET_PeerIdentity peer; }; +/** + * A merge message body. + */ struct GNUNET_MESSENGER_MessageMerge { + /** + * The hash of a second previous message. + */ struct GNUNET_HashCode previous; }; +/** + * A request message body. + */ struct GNUNET_MESSENGER_MessageRequest { + /** + * The hash of the requested message. + */ struct GNUNET_HashCode hash; }; +/** + * An invite message body. + */ struct GNUNET_MESSENGER_MessageInvite { + /** + * The peer identity of an open door to a room. + */ struct GNUNET_PeerIdentity door; + + /** + * The hash identifying the port of the room. + */ struct GNUNET_HashCode key; }; +/** + * A text message body. + */ struct GNUNET_MESSENGER_MessageText { + /** + * The containing text. + */ char *text; }; +/** + * A file message body. + */ struct GNUNET_MESSENGER_MessageFile { + /** + * The symmetric key to decrypt the file. + */ struct GNUNET_CRYPTO_SymmetricSessionKey key; + + /** + * The hash of the original file. + */ struct GNUNET_HashCode hash; + + /** + * The name of the original file. + */ char name[NAME_MAX]; + + /** + * The uri of the encrypted file. + */ char *uri; }; +/** + * A private message body. + */ struct GNUNET_MESSENGER_MessagePrivate { + /** + * The ECDH key to decrypt the message. + */ struct GNUNET_CRYPTO_EcdhePublicKey key; + /** + * The length of the encrypted message. + */ uint16_t length; + + /** + * The data of the encrypted message. + */ char *data; }; +/** + * The unified body of a #GNUNET_MESSENGER_Message. + */ struct GNUNET_MESSENGER_MessageBody { union { struct GNUNET_MESSENGER_MessageInfo info; - struct GNUNET_MESSENGER_MessageJoin join; struct GNUNET_MESSENGER_MessageLeave leave; - struct GNUNET_MESSENGER_MessageName name; struct GNUNET_MESSENGER_MessageKey key; struct GNUNET_MESSENGER_MessagePeer peer; struct GNUNET_MESSENGER_MessageId id; - struct GNUNET_MESSENGER_MessageMiss miss; struct GNUNET_MESSENGER_MessageMerge merge; struct GNUNET_MESSENGER_MessageRequest request; - struct GNUNET_MESSENGER_MessageInvite invite; struct GNUNET_MESSENGER_MessageText text; struct GNUNET_MESSENGER_MessageFile file; - struct GNUNET_MESSENGER_MessagePrivate private; }; }; @@ -222,7 +400,14 @@ struct GNUNET_MESSENGER_MessageBody */ struct GNUNET_MESSENGER_Message { + /** + * Header. + */ struct GNUNET_MESSENGER_MessageHeader header; + + /** + * Body + */ struct GNUNET_MESSENGER_MessageBody body; }; -- cgit v1.2.3 From 08579a887336283b7400b3540f01729bf001b5e1 Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Fri, 13 Nov 2020 11:19:51 +0900 Subject: -fix postgres test connection string --- src/namestore/perf_namestore_api_postgres.conf | 2 +- src/namestore/test_namestore_api_postgres.conf | 2 +- src/namestore/test_plugin_namestore_postgres.conf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/namestore/perf_namestore_api_postgres.conf b/src/namestore/perf_namestore_api_postgres.conf index 16f530252..52d0ecdd5 100644 --- a/src/namestore/perf_namestore_api_postgres.conf +++ b/src/namestore/perf_namestore_api_postgres.conf @@ -7,5 +7,5 @@ DATABASE = postgres DISABLE = YES [namestore-postgres] -CONFIG = connect_timeout=10; dbname=gnunetcheck +CONFIG = connect_timeout=10 dbname=gnunetcheck TEMPORARY_TABLE = YES diff --git a/src/namestore/test_namestore_api_postgres.conf b/src/namestore/test_namestore_api_postgres.conf index 9960e6315..93ef935b5 100644 --- a/src/namestore/test_namestore_api_postgres.conf +++ b/src/namestore/test_namestore_api_postgres.conf @@ -5,5 +5,5 @@ DATABASE = postgres [namestore-postgres] -CONFIG = connect_timeout=10; dbname=gnunetcheck +CONFIG = connect_timeout=10 dbname=gnunetcheck TEMPORARY_TABLE = YES diff --git a/src/namestore/test_plugin_namestore_postgres.conf b/src/namestore/test_plugin_namestore_postgres.conf index 8473857d5..2ce8a7792 100644 --- a/src/namestore/test_plugin_namestore_postgres.conf +++ b/src/namestore/test_plugin_namestore_postgres.conf @@ -1,3 +1,3 @@ [namestore-postgres] -CONFIG = connect_timeout=10; dbname=gnunetcheck +CONFIG = connect_timeout=10 dbname=gnunetcheck TEMPORARY_TABLE = YES -- cgit v1.2.3 From c185348b6784a80bb8b394e34e3bf447d8dd1f57 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Fri, 13 Nov 2020 15:24:29 +0100 Subject: -added test config for messenger --- src/messenger/test_messenger_api.conf | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/messenger/test_messenger_api.conf (limited to 'src') diff --git a/src/messenger/test_messenger_api.conf b/src/messenger/test_messenger_api.conf new file mode 100644 index 000000000..f5837392e --- /dev/null +++ b/src/messenger/test_messenger_api.conf @@ -0,0 +1,17 @@ +@INLINE@ ../../contrib/conf/gnunet/no_forcestart.conf +@INLINE@ ../../contrib/conf/gnunet/no_autostart_above_core.conf + +[PATHS] +GNUNET_TEST_HOME = $GNUNET_TMP/test-messenger-api/ + +[cadet] +START_ON_DEMAND = YES + +[identity] +START_ON_DEMAND = YES + +[messenger] +START_ON_DEMAND = YES + +[nat] +ENABLE_UPNP = NO \ No newline at end of file -- cgit v1.2.3 From e19e93df13a84b26db9f129f509ecb74a1b93145 Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Fri, 13 Nov 2020 23:46:16 +0900 Subject: -warnings mostly format --- configure.ac | 4 +- po/de.po | 1244 +-- po/es.po | 1312 ++-- po/fr.po | 1222 +-- po/it.po | 1221 +-- po/sr.po | 10121 +++++++++++++++---------- po/sv.po | 1246 +-- po/vi.po | 1258 +-- po/zh_CN.po | 1246 +-- src/ats-tests/ats-testing-log.c | 9 +- src/auction/gnunet-service-auction.c | 4 +- src/cadet/gnunet-service-cadet_channel.c | 2 +- src/cadet/gnunet-service-cadet_tunnels.c | 5 +- src/dht/dht_api.c | 4 +- src/dns/gnunet-dns-monitor.c | 2 +- src/dns/gnunet-service-dns.c | 2 +- src/fs/fs_uri.c | 2 +- src/include/Makefile.am | 1 + src/nse/gnunet-nse-profiler.c | 4 +- src/set/gnunet-service-set_union.c | 2 +- src/setu/gnunet-service-setu.c | 2 +- src/testbed/gnunet-service-testbed_oc.c | 71 +- src/testbed/testbed_api.c | 3 +- src/transport/gnunet-helper-transport-wlan.c | 2 +- src/transport/gnunet-service-transport.c | 3 +- src/transport/plugin_transport_wlan.c | 9 +- 26 files changed, 10740 insertions(+), 8261 deletions(-) (limited to 'src') diff --git a/configure.ac b/configure.ac index a9594a56c..530e38d88 100644 --- a/configure.ac +++ b/configure.ac @@ -21,7 +21,7 @@ # AC_PREREQ(2.61) # Checks for programs. -AC_INIT([gnunet], [0.13.3], [bug-gnunet@gnu.org]) +AC_INIT([gnunet], [0.14.0], [bug-gnunet@gnu.org]) AC_CONFIG_AUX_DIR([build-aux]) # check for legacy option that is no longer supported (#5627) and fail hard @@ -1912,8 +1912,6 @@ src/gnsrecord/Makefile src/hello/Makefile src/identity/Makefile src/identity/identity.conf -src/abd/Makefile -src/abd/abd.conf src/include/Makefile src/integration-tests/Makefile src/json/Makefile diff --git a/po/de.po b/po/de.po index f02b44dfe..3e38e207f 100644 --- 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: 2020-10-13 16:12+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2015-03-08 16:16+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" @@ -21,7 +21,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.7.4\n" -#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1303 +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 #, fuzzy, c-format msgid "Ego `%s' not known to identity service\n" msgstr "`%s': unbekannter Dienst: %s\n" @@ -32,8 +32,8 @@ msgid "Issuer public key `%s' is not well-formed\n" msgstr "" #: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 -#: src/namestore/gnunet-namestore-fcfsd.c:1154 #: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 #, fuzzy, c-format msgid "Failed to connect to namestore\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" @@ -499,14 +499,81 @@ msgstr "" msgid "Initiating shutdown as requested by client.\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:896 -msgid "Stop logging\n" -msgstr "Protokollierung stoppen\n" +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 +#, c-format +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" -#: src/ats-tests/ats-testing-log.c:952 +#: src/ats/gnunet-ats-solver-eval.c:3011 +#, c-format +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3063 +#, c-format +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997 +msgid "solver to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 +msgid "experiment to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3564 +msgid "print logging" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:326 +#, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:336 +#, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:382 +#, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:474 #, fuzzy, c-format -msgid "Start logging `%s'\n" -msgstr "Collection `%s' begonnen.\n" +msgid "Failed to initialize solver `%s'!\n" +msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n" + +#: src/ats/plugin_ats_proportional.c:1142 +#, fuzzy, c-format +msgid "Invalid %s configuration %f \n" +msgstr "Konfiguration konnte nicht aus %s geladen werden\n" + +#: src/ats/plugin_ats_proportional.c:1165 +#, fuzzy, c-format +msgid "Invalid %s configuration %f\n" +msgstr " gconfig\tGTK Konfiguration\n" #: src/ats-tests/ats-testing.c:420 #, c-format @@ -518,6 +585,15 @@ msgstr "" msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" +#: src/ats-tests/ats-testing-log.c:896 +msgid "Stop logging\n" +msgstr "Protokollierung stoppen\n" + +#: src/ats-tests/ats-testing-log.c:952 +#, fuzzy, c-format +msgid "Start logging `%s'\n" +msgstr "Collection `%s' begonnen.\n" + #: src/ats-tests/gnunet-ats-sim.c:92 #, c-format msgid "" @@ -525,16 +601,6 @@ msgid "" "= %u KiB/s\n" msgstr "" -#: src/ats-tests/gnunet-solver-eval.c:997 src/ats/gnunet-ats-solver-eval.c:3552 -msgid "solver to use" -msgstr "" - -#: src/ats-tests/gnunet-solver-eval.c:1003 -#: src/ats-tests/gnunet-solver-eval.c:1008 -#: src/ats/gnunet-ats-solver-eval.c:3557 -msgid "experiment to use" -msgstr "" - #: src/ats-tool/gnunet-ats.c:299 #, c-format msgid "%u address resolutions had a timeout\n" @@ -652,72 +718,6 @@ msgstr "" msgid "Print information about ATS state" msgstr "Informationen über andere GNUnet Knoten ausgeben." -#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 -#, c-format -msgid "" -"Could not load quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3011 -#, c-format -msgid "" -"No outbound quota configured for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3063 -#, c-format -msgid "" -"No outbound quota configure for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3564 -msgid "print logging" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3569 -msgid "save logging to disk" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3574 -msgid "disable normalization" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:326 -#, c-format -msgid "" -"Could not load %s quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:336 -#, c-format -msgid "%s quota configured for network `%s' is %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:382 -#, c-format -msgid "" -"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:474 -#, fuzzy, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n" - -#: src/ats/plugin_ats_proportional.c:1142 -#, fuzzy, c-format -msgid "Invalid %s configuration %f \n" -msgstr "Konfiguration konnte nicht aus %s geladen werden\n" - -#: src/ats/plugin_ats_proportional.c:1165 -#, fuzzy, c-format -msgid "Invalid %s configuration %f\n" -msgstr " gconfig\tGTK Konfiguration\n" - #: src/auction/gnunet-auction-create.c:163 msgid "description of the item to be sold" msgstr "" @@ -755,7 +755,7 @@ msgstr "" #: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 #: src/conversation/gnunet-conversation-test.c:256 -#: src/revocation/gnunet-revocation.c:552 src/template/gnunet-template.c:75 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 msgid "help text" msgstr "Hilfetext" @@ -854,28 +854,6 @@ msgstr "Ausführlicherer Modus (empfangene Werte ausgeben)" msgid "Connection to conversation service lost, trying to reconnect\n" msgstr "" -#: src/conversation/gnunet-conversation-test.c:120 -#, c-format -msgid "" -"\n" -"End of transmission. Have a GNU day.\n" -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:146 -#, c-format -msgid "" -"\n" -"We are now playing your recording back. If you can hear it, your audio " -"settings are working..." -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:218 -#, c-format -msgid "" -"We will now be recording you for %s. After that time, the recording will be " -"played back to you..." -msgstr "" - #: src/conversation/gnunet-conversation.c:264 #, c-format msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" @@ -1135,8 +1113,30 @@ msgstr "" msgid "Enables having a conversation with other GNUnet users." msgstr "" -#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#: src/conversation/gnunet-conversation-test.c:120 +#, c-format +msgid "" +"\n" +"End of transmission. Have a GNU day.\n" +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:146 +#, c-format +msgid "" +"\n" +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:218 +#, c-format +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" + #: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 #, c-format msgid "Read error from STDIN: %d %s\n" msgstr "Fehler beim Lesen aus STDIN: %d %s\n" @@ -1261,7 +1261,7 @@ msgstr "ogg_stream_init() fehlgeschlagen.\n" msgid "Failed to allocate %u bytes for second packet\n" msgstr "UDP-Sockets können nicht geöffnet werden\n" -#: src/conversation/gnunet-service-conversation.c:1287 +#: src/conversation/gnunet-service-conversation.c:1286 #, fuzzy, c-format msgid "Could not open line, port %s already in use!\n" msgstr "Verbindung zum %s-Dienst ist fehlgeschlagen!\n" @@ -1988,7 +1988,7 @@ msgid "" msgstr "" #: src/datastore/plugin_datastore_sqlite.c:1316 -#: src/namecache/plugin_namecache_sqlite.c:570 +#: src/namecache/plugin_namecache_sqlite.c:564 #: src/namestore/plugin_namestore_sqlite.c:765 msgid "Sqlite database running\n" msgstr "Sqlite-Datenbank läuft\n" @@ -2059,6 +2059,53 @@ msgstr "" msgid "Prints all packets that go through the DHT." msgstr "" +#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 +#, c-format +msgid "Exiting as the number of peers is %u\n" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +#, fuzzy +msgid "number of peers to start" +msgstr "Anzahl an Durchläufen" + +#: src/dht/gnunet_dht_profiler.c:961 +msgid "number of PUTs to perform per peer" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1023 +msgid "Measure quality and performance of the DHT service." +msgstr "" + #: src/dht/gnunet-dht-put.c:133 msgid "Must provide KEY and DATA for DHT put!\n" msgstr "" @@ -2323,60 +2370,14 @@ msgstr "" msgid "# DHT requests combined" msgstr "# dht Anfragen weitergeleitet" -#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 -#, c-format -msgid "Exiting as the number of peers is %u\n" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 -#, fuzzy -msgid "number of peers to start" -msgstr "Anzahl an Durchläufen" - -#: src/dht/gnunet_dht_profiler.c:961 -msgid "number of PUTs to perform per peer" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 -#: src/testbed/gnunet-testbed-profiler.c:305 -msgid "name of the file with the login information for the testbed" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:973 -msgid "delay between rounds for collecting statistics (default: 30 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:979 -msgid "delay to start doing PUTs (default: 1 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:985 -msgid "delay to start doing GETs (default: 5 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:990 -msgid "replication degree for DHT PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:996 -msgid "chance that a peer is selected at random for PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1002 -msgid "timeout for DHT PUT and GET requests (default: 1 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1023 -msgid "Measure quality and performance of the DHT service." -msgstr "" - #: src/dht/plugin_block_dht.c:189 #, fuzzy, c-format msgid "Block not of type %u\n" msgstr "Kein Transport des Typs %d bekannt.\n" #: src/dht/plugin_block_dht.c:198 -msgid "Size mismatch for block\n" +#, c-format +msgid "Size mismatch for block with type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:209 @@ -2825,8 +2826,8 @@ msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" #: src/fs/fs_download.c:1053 #, c-format msgid "" -"Internal error or bogus download URI (expected %u bytes at depth %u and " -"offset %llu/%llu, got %u bytes)" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" msgstr "" #: src/fs/fs_download.c:1075 @@ -3165,7 +3166,7 @@ msgid "" "You must specify one and only one directory name for automatic publication.\n" msgstr "Sie dürfen nur eine Datei zum Deindizieren angeben.\n" -#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:888 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "Gewünschten Grad LEVEL an Sender-Anonymität festlegen" @@ -3173,15 +3174,15 @@ msgstr "Gewünschten Grad LEVEL an Sender-Anonymität festlegen" msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:893 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "" -#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:938 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "Die Priorität des Inhalts angeben" -#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:951 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "" @@ -3266,7 +3267,7 @@ msgstr "" msgid "You need to specify a URI argument.\n" msgstr "Sie müssen einen Empfänger angeben!\n" -#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:707 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, fuzzy, c-format msgid "Failed to parse URI: %s\n" msgstr "Datei `%s' hat URI: %s\n" @@ -3279,7 +3280,7 @@ msgstr "" msgid "Target filename must be specified.\n" msgstr "" -#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:861 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 #: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, fuzzy, c-format msgid "Could not initialize `%s' subsystem.\n" @@ -3319,6 +3320,15 @@ msgid "" "chk/...)" msgstr "" +#: src/fs/gnunet-fs.c:128 +msgid "print a list of all indexed files" +msgstr "" + +#: src/fs/gnunet-fs.c:141 +#, fuzzy +msgid "Special file-sharing operations" +msgstr "Alle Optionen anzeigen" + #: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "" @@ -3335,15 +3345,6 @@ msgstr "" msgid "run a testbed to measure file-sharing performance" msgstr "" -#: src/fs/gnunet-fs.c:128 -msgid "print a list of all indexed files" -msgstr "" - -#: src/fs/gnunet-fs.c:141 -#, fuzzy -msgid "Special file-sharing operations" -msgstr "Alle Optionen anzeigen" - #: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" @@ -3394,97 +3395,97 @@ msgstr "Daten des Moduls `%s' werden aktualisiert\n" msgid "Keywords for file `%s' (%s)\n" msgstr "Schlüsselwörter für Datei `%s':\n" -#: src/fs/gnunet-publish.c:577 +#: src/fs/gnunet-publish.c:582 #, fuzzy msgid "Could not publish\n" msgstr "`%s': Kann nicht senden.\n" -#: src/fs/gnunet-publish.c:603 +#: src/fs/gnunet-publish.c:611 #, fuzzy msgid "Could not start publishing.\n" msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" -#: src/fs/gnunet-publish.c:636 +#: src/fs/gnunet-publish.c:644 #, fuzzy, c-format msgid "Scanning directory `%s'.\n" msgstr "==> Verzeichnis `%s':\n" -#: src/fs/gnunet-publish.c:638 +#: src/fs/gnunet-publish.c:646 #, fuzzy, c-format msgid "Scanning file `%s'.\n" msgstr "Binde Konfigurationsdatei `%s' ein\n" -#: src/fs/gnunet-publish.c:644 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "" -#: src/fs/gnunet-publish.c:650 +#: src/fs/gnunet-publish.c:658 #, fuzzy msgid "Preprocessing complete.\n" msgstr "GNUnet wurde erfolgreich heruntergefahren.\n" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:664 #, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "" -#: src/fs/gnunet-publish.c:662 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "" -#: src/fs/gnunet-publish.c:670 +#: src/fs/gnunet-publish.c:678 #, fuzzy msgid "Error scanning directory.\n" msgstr "=\tFehler beim Lesen des Verzeichnisses.\n" -#: src/fs/gnunet-publish.c:697 +#: src/fs/gnunet-publish.c:705 #, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "" -#: src/fs/gnunet-publish.c:729 +#: src/fs/gnunet-publish.c:737 #, fuzzy, c-format msgid "Failed to access `%s': %s\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" -#: src/fs/gnunet-publish.c:746 +#: src/fs/gnunet-publish.c:754 msgid "" "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " "installed?\n" msgstr "" -#: src/fs/gnunet-publish.c:802 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "" -#: src/fs/gnunet-publish.c:809 +#: src/fs/gnunet-publish.c:817 #, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "Sie dürfen nur eine einzige Datei zum Einfügen angeben.\n" -#: src/fs/gnunet-publish.c:815 +#: src/fs/gnunet-publish.c:823 #, fuzzy, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "Sie müssen einen Empfänger angeben!\n" -#: src/fs/gnunet-publish.c:824 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, fuzzy, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "Option `%s' macht keinen Sinn ohne die Option `%s'.\n" -#: src/fs/gnunet-publish.c:836 src/fs/gnunet-publish.c:845 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 #: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "Die Option »%s« ergibt keinen Sinn ohne die Option »%s«.\n" -#: src/fs/gnunet-publish.c:898 +#: src/fs/gnunet-publish.c:906 msgid "enable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-publish.c:904 +#: src/fs/gnunet-publish.c:912 msgid "" "print list of extracted keywords that would be used, but do not perform " "upload" @@ -3492,7 +3493,7 @@ msgstr "" "Liste der extrahierten Schlüsselworte, die verwendet werden würden, " "ausgeben, aber keinen Upload durchführen" -#: src/fs/gnunet-publish.c:912 +#: src/fs/gnunet-publish.c:920 msgid "" "add an additional keyword for the top-level file or directory (this option " "can be specified multiple times)" @@ -3500,13 +3501,13 @@ msgstr "" "Ein zusätzliches Schlüsselwort für die Datei oder das Verzeichnis auf der " "obersten Ebene hinzufügen (diese Option kann mehrmals angegeben werden)" -#: src/fs/gnunet-publish.c:919 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "" "Die Meta-Daten des angegebenen Typs TYPE auf den angegebenen Wert VALUE " "setzen" -#: src/fs/gnunet-publish.c:924 +#: src/fs/gnunet-publish.c:932 msgid "" "do not index, perform full insertion (stores entire file in encrypted form " "in GNUnet database)" @@ -3514,7 +3515,7 @@ msgstr "" "Nicht indizieren, sondern komplett einfügen (speichert die gesamte Datei in " "verschlüsselter Form in der GNUnet-Datenbank)" -#: src/fs/gnunet-publish.c:931 +#: src/fs/gnunet-publish.c:939 msgid "" "specify ID of an updated version to be published in the future (for " "namespace insertions only)" @@ -3522,32 +3523,32 @@ msgstr "" "ID einer aktualisierten Version angeben, die in der Zukunft veröffentlicht " "werden soll. (nur für das Einfügen in Namensräume)" -#: src/fs/gnunet-publish.c:944 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" msgstr "" "Die Datei unter dem Pseudonym NAME veröffentlichen (platziert die Datei in " "einem Namensraum)" -#: src/fs/gnunet-publish.c:956 +#: src/fs/gnunet-publish.c:964 msgid "" "only simulate the process but do not do any actual publishing (useful to " "compute URIs)" msgstr "" -#: src/fs/gnunet-publish.c:963 +#: src/fs/gnunet-publish.c:971 msgid "" "set the ID of this version of the publication (for namespace insertions only)" msgstr "" "Die ID dieser Version der Veröffentlichung setzen (nur für das Einfügen in " "Namensräume)" -#: src/fs/gnunet-publish.c:971 +#: src/fs/gnunet-publish.c:979 msgid "" "URI to be published (can be used instead of passing a file to add keywords " "to the file with the respective URI)" msgstr "" -#: src/fs/gnunet-publish.c:989 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "" @@ -3962,7 +3963,7 @@ msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" msgid "Unindex a file that was previously indexed with gnunet-publish." msgstr "" -#: src/gns/gns_tld_api.c:292 +#: src/gns/gns_tld_api.c:293 msgid "Expected a base32-encoded public zone key\n" msgstr "" @@ -4042,7 +4043,53 @@ msgstr "" msgid "look for GNS2DNS records instead of ANY" msgstr "" -#: src/gns/gnunet-gns-import.c:486 +#: src/gns/gnunet-gns.c:257 +#, fuzzy, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "»%s« ist keine gültige IP-Adresse.\n" + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 +#, c-format +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" + +#: src/gns/gnunet-gns.c:305 +#, c-format +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" + +#: src/gns/gnunet-gns.c:340 +msgid "Lookup a record for the given name" +msgstr "" + +#: src/gns/gnunet-gns.c:346 +#, fuzzy +msgid "Specify the type of the record to lookup" +msgstr "Die Priorität des Inhalts angeben" + +#: src/gns/gnunet-gns.c:352 +#, fuzzy +msgid "Specify a timeout for the lookup" +msgstr "Die Priorität des Inhalts angeben" + +#: src/gns/gnunet-gns.c:356 +msgid "No unneeded output" +msgstr "" + +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" + +#: src/gns/gnunet-gns.c:375 +#, fuzzy +msgid "GNUnet GNS resolver tool" +msgstr "GNUnet Netzwerk Topologie tracen." + +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "" @@ -4162,52 +4209,6 @@ msgstr "" msgid "GNUnet GNS proxy" msgstr "" -#: src/gns/gnunet-gns.c:257 -#, fuzzy, c-format -msgid "`%s' is not a valid DNS domain name\n" -msgstr "»%s« ist keine gültige IP-Adresse.\n" - -#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 -#, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "" - -#: src/gns/gnunet-gns.c:281 -msgid "Cannot resolve using GNS: GNUnet peer not running\n" -msgstr "" - -#: src/gns/gnunet-gns.c:305 -#, c-format -msgid "Invalid typename specified, assuming `ANY'\n" -msgstr "" - -#: src/gns/gnunet-gns.c:340 -msgid "Lookup a record for the given name" -msgstr "" - -#: src/gns/gnunet-gns.c:346 -#, fuzzy -msgid "Specify the type of the record to lookup" -msgstr "Die Priorität des Inhalts angeben" - -#: src/gns/gnunet-gns.c:352 -#, fuzzy -msgid "Specify a timeout for the lookup" -msgstr "Die Priorität des Inhalts angeben" - -#: src/gns/gnunet-gns.c:356 -msgid "No unneeded output" -msgstr "" - -#: src/gns/gnunet-gns.c:361 -msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" -msgstr "" - -#: src/gns/gnunet-gns.c:375 -#, fuzzy -msgid "GNUnet GNS resolver tool" -msgstr "GNUnet Netzwerk Topologie tracen." - #: src/gns/gnunet-service-gns.c:505 #, fuzzy msgid "Properly base32-encoded public key required" @@ -4219,8 +4220,8 @@ msgid "Failed to connect to the namecache!\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" #: src/gns/gnunet-service-gns.c:560 -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:444 -#: src/zonemaster/gnunet-service-zonemaster.c:887 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 #, fuzzy msgid "Could not connect to DHT!\n" msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n" @@ -4265,66 +4266,70 @@ msgstr "" msgid "VPN returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1909 +#: src/gns/gnunet-service-gns_resolver.c:1910 #, c-format msgid "Name `%s' cannot be converted to IDNA." msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1922 +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1965 +#: src/gns/gnunet-service-gns_resolver.c:1966 #, fuzzy, c-format msgid "GNS lookup failed (zero records found for `%s')\n" msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" -#: src/gns/gnunet-service-gns_resolver.c:2385 +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2408 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, fuzzy, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" -#: src/gns/gnunet-service-gns_resolver.c:2576 +#: src/gns/gnunet-service-gns_resolver.c:2581 #, c-format msgid "GNS namecache returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2716 +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:167 -#, c-format -msgid "Unable to parse PKEY record `%s'\n" +#: src/gns/plugin_gnsrecord_gns.c:174 +#, fuzzy, c-format +msgid "Unable to parse zone key record `%s'\n" +msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" + +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:197 +#: src/gns/plugin_gnsrecord_gns.c:213 #, fuzzy, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" -#: src/gns/plugin_gnsrecord_gns.c:213 +#: src/gns/plugin_gnsrecord_gns.c:229 #, fuzzy, c-format msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" -#: src/gns/plugin_gnsrecord_gns.c:237 +#: src/gns/plugin_gnsrecord_gns.c:253 #, fuzzy, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" -#: src/gns/plugin_gnsrecord_gns.c:269 +#: src/gns/plugin_gnsrecord_gns.c:285 #, fuzzy, c-format msgid "Unable to parse BOX record string `%s'\n" msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" -#: src/gns/plugin_rest_gns.c:447 +#: src/gns/plugin_rest_gns.c:448 #, fuzzy msgid "Gns REST API initialized\n" msgstr " Verbindung fehlgeschlagen\n" @@ -4636,7 +4641,7 @@ msgid "# hostlist URIs written to file" msgstr "" #: src/hostlist/gnunet-daemon-hostlist_client.c:1657 -#: src/transport/plugin_transport_http_client.c:2301 +#: src/transport/plugin_transport_http_client.c:2300 #, c-format msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" msgstr "" @@ -4765,58 +4770,62 @@ msgstr "»%s« ist keine gültige IP-Adresse.\n" msgid "Could not start hostlist HTTP server on port %u\n" msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" -#: src/identity/gnunet-identity.c:209 +#: src/identity/gnunet-identity.c:214 #, fuzzy, c-format msgid "Failed to create ego: %s\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" -#: src/identity/gnunet-identity.c:250 +#: src/identity/gnunet-identity.c:255 #, fuzzy, c-format msgid "Failed to set default ego: %s\n" msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n" -#: src/identity/gnunet-identity.c:446 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "" -#: src/identity/gnunet-identity.c:451 +#: src/identity/gnunet-identity.c:467 msgid "delete ego NAME " msgstr "" -#: src/identity/gnunet-identity.c:457 +#: src/identity/gnunet-identity.c:473 msgid "" "set the private key for the identity to PRIVATE_KEY (use together with -C)" msgstr "" -#: src/identity/gnunet-identity.c:461 +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + +#: src/identity/gnunet-identity.c:482 msgid "display all egos" msgstr "" -#: src/identity/gnunet-identity.c:465 +#: src/identity/gnunet-identity.c:486 #, fuzzy msgid "reduce output" msgstr "Ausführliche Ausgabe" -#: src/identity/gnunet-identity.c:472 +#: src/identity/gnunet-identity.c:493 msgid "" "set default identity to NAME for a subsystem SUBSYSTEM (use together with -" "s) or restrict results to NAME (use together with -d)" msgstr "" -#: src/identity/gnunet-identity.c:476 +#: src/identity/gnunet-identity.c:497 msgid "run in monitor mode egos" msgstr "" -#: src/identity/gnunet-identity.c:480 +#: src/identity/gnunet-identity.c:501 msgid "display private keys as well" msgstr "" -#: src/identity/gnunet-identity.c:487 +#: src/identity/gnunet-identity.c:508 msgid "" "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" msgstr "" -#: src/identity/gnunet-identity.c:502 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "" @@ -4852,26 +4861,26 @@ msgstr "" msgid "no matching ego found" msgstr "" -#: src/identity/gnunet-service-identity.c:1072 +#: src/identity/gnunet-service-identity.c:1133 #, fuzzy, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n" -#: src/identity/gnunet-service-identity.c:1130 +#: src/identity/gnunet-service-identity.c:1191 #, fuzzy, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" -#: src/identity/gnunet-service-identity.c:1139 +#: src/identity/gnunet-service-identity.c:1200 #, fuzzy, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" -#: src/identity/plugin_rest_identity.c:1384 +#: src/identity/plugin_rest_identity.c:1385 msgid "Identity REST API initialized\n" msgstr "" -#: src/json/json.c:133 +#: src/json/json.c:139 #, fuzzy, c-format msgid "Failed to parse JSON in option `%s': %s (%s)\n" msgstr "Datei wurde als `%s' gespeichert.\n" @@ -4916,7 +4925,7 @@ msgstr "Ungültiger Parameter: `%s'\n" msgid "You must specify a name\n" msgstr "Sie müssen einen Empfänger angeben!\n" -#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1640 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "" @@ -4925,22 +4934,22 @@ msgstr "" msgid "specifies the public key of the zone to look in" msgstr "Die Priorität des Inhalts angeben" -#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1701 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 #, fuzzy msgid "GNUnet zone manipulation tool" msgstr "GNUnet Konfiguration" -#: src/namecache/namecache_api.c:293 +#: src/namecache/namecache_api.c:285 msgid "Namecache failed to cache block" msgstr "" -#: src/namecache/namecache_api.c:381 +#: src/namecache/namecache_api.c:373 #, fuzzy msgid "Error communicating with namecache service" msgstr "Informationen über andere GNUnet Knoten ausgeben." #: src/namecache/plugin_namecache_flat.c:118 -#: src/namecache/plugin_namecache_flat.c:256 +#: src/namecache/plugin_namecache_flat.c:253 #: src/namestore/plugin_namestore_flat.c:176 #: src/namestore/plugin_namestore_flat.c:424 #: src/peerstore/plugin_peerstore_flat.c:380 @@ -4962,7 +4971,7 @@ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" msgid "Unable to read file: %s.\n" msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" -#: src/namecache/plugin_namecache_flat.c:410 +#: src/namecache/plugin_namecache_flat.c:404 #, fuzzy msgid "flat plugin running\n" msgstr "Sqlite-Datenbank läuft\n" @@ -4975,70 +4984,6 @@ msgstr "Sqlite-Datenbank läuft\n" msgid "Failed to setup database at `%s'\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" -#: src/namestore/gnunet-namestore-fcfsd.c:552 -#, fuzzy, c-format -msgid "Unsupported form value `%s'\n" -msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:579 -#, fuzzy, c-format -msgid "Failed to create record for domain `%s': %s\n" -msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:600 -msgid "Error when mapping zone to name\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:632 -#, c-format -msgid "Found existing name `%s' for the given key\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:694 -#, c-format -msgid "Found %u existing records for domain `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:784 -#, fuzzy, c-format -msgid "Failed to create page for `%s'\n" -msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:803 -#, fuzzy, c-format -msgid "Failed to setup post processor for `%s'\n" -msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:840 -msgid "Domain name must not contain `.'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:849 -msgid "Domain name must not contain `+'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1084 -msgid "No ego configured for `fcfsd` subsystem\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1115 -#, fuzzy -msgid "Failed to start HTTP server\n" -msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1163 -#, fuzzy -msgid "Failed to connect to identity\n" -msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1190 -msgid "name of the zone that is to be managed by FCFSD" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1210 -msgid "GNU Name System First Come First Serve name registration service" -msgstr "" - #: src/namestore/gnunet-namestore.c:334 #, c-format msgid "Adding record failed: %s\n" @@ -5054,11 +4999,17 @@ msgstr "" msgid "Deleting record failed%s%s\n" msgstr "" -#: src/namestore/gnunet-namestore.c:656 src/namestore/gnunet-namestore.c:667 +#: src/namestore/gnunet-namestore.c:656 #, c-format msgid "A %s record exists already under `%s', no other records can be added.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:680 #, c-format msgid "" @@ -5066,11 +5017,16 @@ msgid "" "zone.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:696 src/namestore/gnunet-namestore.c:710 +#: src/namestore/gnunet-namestore.c:696 #, c-format msgid "Records already exist under `%s', cannot add `%s' record.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:726 #, c-format msgid "" @@ -5101,7 +5057,7 @@ msgstr "" #: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 #: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 #: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 -#: src/namestore/gnunet-namestore.c:1229 +#: src/namestore/gnunet-namestore.c:1228 #, fuzzy, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "Unbekannte Operation `%s'\n" @@ -5117,7 +5073,7 @@ msgstr "Ungültiger Parameter: `%s'\n" #: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 #: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 -#: src/namestore/gnunet-namestore.c:1231 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "" @@ -5136,7 +5092,7 @@ msgstr "" msgid "Value `%s' invalid for record type `%s'\n" msgstr "%s: Symbolwert `%s' ist ungültig für %s\n" -#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1238 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, fuzzy, c-format msgid "Invalid time format `%s'\n" msgstr "Ungültiger Parameter: `%s'\n" @@ -5145,23 +5101,23 @@ msgstr "Ungültiger Parameter: `%s'\n" msgid "del" msgstr "" -#: src/namestore/gnunet-namestore.c:1198 +#: src/namestore/gnunet-namestore.c:1197 #, c-format msgid "Invalid public key for reverse lookup `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1221 +#: src/namestore/gnunet-namestore.c:1220 #: src/peerinfo-tool/gnunet-peerinfo.c:736 #, fuzzy, c-format msgid "Invalid URI `%s'\n" msgstr "Ungültiger Parameter: `%s'\n" -#: src/namestore/gnunet-namestore.c:1291 +#: src/namestore/gnunet-namestore.c:1290 #, c-format msgid "Label `%s' contains `.' which is not allowed\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1341 +#: src/namestore/gnunet-namestore.c:1340 #, c-format msgid "" "No default identity configured for `namestore' subsystem\n" @@ -5169,102 +5125,171 @@ msgid "" "Run gnunet-identity -d to get a list of choices for $NAME\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1406 +#: src/namestore/gnunet-namestore.c:1405 #, c-format msgid "Superfluous command line arguments (starting with `%s') ignored\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1435 +#: src/namestore/gnunet-namestore.c:1434 #, fuzzy, c-format msgid "Cannot connect to identity service\n" msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n" -#: src/namestore/gnunet-namestore.c:1482 +#: src/namestore/gnunet-namestore.c:1481 msgid "Empty record line argument is not allowed.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1494 +#: src/namestore/gnunet-namestore.c:1493 #, c-format msgid "Invalid expiration time `%s' (must be without unit)\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1506 src/namestore/gnunet-namestore.c:1522 -#: src/namestore/gnunet-namestore.c:1539 +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 #, fuzzy, c-format msgid "Missing entries in record line `%s'.\n" msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" -#: src/namestore/gnunet-namestore.c:1514 +#: src/namestore/gnunet-namestore.c:1513 #, fuzzy, c-format msgid "Unknown record type `%s'\n" msgstr "Unbekannter Befehl »%s«\n" -#: src/namestore/gnunet-namestore.c:1552 +#: src/namestore/gnunet-namestore.c:1551 #, fuzzy, c-format msgid "Invalid record data for type %s: `%s'.\n" msgstr "Ungültiges Format für IP: »%s«\n" -#: src/namestore/gnunet-namestore.c:1609 +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "" -#: src/namestore/gnunet-namestore.c:1612 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "" -#: src/namestore/gnunet-namestore.c:1616 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "" -#: src/namestore/gnunet-namestore.c:1623 +#: src/namestore/gnunet-namestore.c:1622 msgid "" "expiration time for record to use (for adding only), \"never\" is possible" msgstr "" -#: src/namestore/gnunet-namestore.c:1629 +#: src/namestore/gnunet-namestore.c:1628 msgid "set the desired nick name for the zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1634 +#: src/namestore/gnunet-namestore.c:1633 msgid "monitor changes in the namestore" msgstr "" -#: src/namestore/gnunet-namestore.c:1646 +#: src/namestore/gnunet-namestore.c:1645 msgid "determine our name for the given PKEY" msgstr "" -#: src/namestore/gnunet-namestore.c:1653 +#: src/namestore/gnunet-namestore.c:1652 msgid "" "set record set to values given by (possibly multiple) RECORDLINES; can be " "specified multiple times" msgstr "" -#: src/namestore/gnunet-namestore.c:1659 +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "" -#: src/namestore/gnunet-namestore.c:1664 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1670 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "" -#: src/namestore/gnunet-namestore.c:1674 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "" -#: src/namestore/gnunet-namestore.c:1680 +#: src/namestore/gnunet-namestore.c:1679 msgid "" "create shadow record (only valid if all other records of the same type have " "expired" msgstr "" -#: src/namestore/gnunet-namestore.c:1686 +#: src/namestore/gnunet-namestore.c:1685 msgid "name of the ego controlling the zone" msgstr "" +#: src/namestore/gnunet-namestore-fcfsd.c:552 +#, fuzzy, c-format +msgid "Unsupported form value `%s'\n" +msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:579 +#, fuzzy, c-format +msgid "Failed to create record for domain `%s': %s\n" +msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 +#, c-format +msgid "Found existing name `%s' for the given key\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "=\tFehler beim Lesen des Verzeichnisses.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:707 +#, c-format +msgid "Found %u existing records for domain `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:796 +#, fuzzy, c-format +msgid "Failed to create page for `%s'\n" +msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:815 +#, fuzzy, c-format +msgid "Failed to setup post processor for `%s'\n" +msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:850 +msgid "Domain name must not contain `.'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:859 +msgid "Domain name must not contain `+'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1094 +msgid "No ego configured for `fcfsd` subsystem\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1125 +#, fuzzy +msgid "Failed to start HTTP server\n" +msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1173 +#, fuzzy +msgid "Failed to connect to identity\n" +msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 +msgid "GNU Name System First Come First Serve name registration service" +msgstr "" + #: src/namestore/gnunet-service-namestore.c:866 #, c-format msgid "Failed to replicate block in namecache: %s\n" @@ -5292,7 +5317,7 @@ msgstr "" msgid "Namestore database file `%s' malformed\n" msgstr "" -#: src/namestore/plugin_namestore_flat.c:789 +#: src/namestore/plugin_namestore_flat.c:792 #, fuzzy msgid "Flat file database running\n" msgstr "Sqlite-Datenbank läuft\n" @@ -5587,6 +5612,10 @@ msgstr "Kommando `%s' wurde nicht gefunden!\n" msgid "`upnpc' command not found\n" msgstr "Kommando `%s' wurde nicht gefunden!\n" +#: src/nse/gnunet-nse.c:124 +msgid "Show network size estimates from NSE service." +msgstr "" + #: src/nse/gnunet-nse-profiler.c:857 msgid "limit to the number of connections to NSE services, 0 for none" msgstr "" @@ -5603,22 +5632,75 @@ msgstr "" msgid "Number of peers to run in each round, separated by commas" msgstr "" -#: src/nse/gnunet-nse-profiler.c:900 -msgid "delay between rounds" -msgstr "" +#: src/nse/gnunet-nse-profiler.c:900 +msgid "delay between rounds" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:912 +msgid "Measure quality and performance of the NSE service." +msgstr "" + +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 +msgid "Value is too large.\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:175 +#, fuzzy, c-format +msgid "Removing expired address of transport `%s'\n" +msgstr "Verfügbare(r) Transport(e): %s\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:306 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s': %s\n" +msgstr "Datei wurde als `%s' gespeichert.\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s'\n" +msgstr "Datei wurde als `%s' gespeichert.\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:426 +msgid "# peers known" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:468 +#, c-format +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" +msgstr "" +"Die Datei »%s« im Verzeichnis »%s« entspricht nicht der Namenskonvention. " +"Die Datei wurde entfernt.\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:624 +#, fuzzy, c-format +msgid "Scanning directory `%s'\n" +msgstr "==> Verzeichnis `%s':\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:631 +#, fuzzy, c-format +msgid "Still no peers found in `%s'!\n" +msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:1024 +#, fuzzy, c-format +msgid "Cleaning up directory `%s'\n" +msgstr "==> Verzeichnis `%s':\n" -#: src/nse/gnunet-nse-profiler.c:912 -msgid "Measure quality and performance of the NSE service." +#: src/peerinfo/gnunet-service-peerinfo.c:1319 +#, c-format +msgid "Importing HELLOs from `%s'\n" msgstr "" -#: src/nse/gnunet-nse.c:124 -msgid "Show network size estimates from NSE service." +#: src/peerinfo/gnunet-service-peerinfo.c:1332 +msgid "Skipping import of included HELLOs\n" msgstr "" -#: src/nse/gnunet-service-nse.c:1443 -#: src/revocation/gnunet-service-revocation.c:834 src/util/gnunet-scrypt.c:257 -msgid "Value is too large.\n" -msgstr "" +#: src/peerinfo/peerinfo_api.c:217 +#, fuzzy +msgid "Failed to receive response from `PEERINFO' service." +msgstr "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n" #: src/peerinfo-tool/gnunet-peerinfo.c:237 #, fuzzy, c-format @@ -5716,63 +5798,6 @@ msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" msgid "Peerinfo REST API initialized\n" msgstr " Verbindung fehlgeschlagen\n" -#: src/peerinfo/gnunet-service-peerinfo.c:175 -#, fuzzy, c-format -msgid "Removing expired address of transport `%s'\n" -msgstr "Verfügbare(r) Transport(e): %s\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:306 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s': %s\n" -msgstr "Datei wurde als `%s' gespeichert.\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:323 -#: src/peerinfo/gnunet-service-peerinfo.c:348 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s'\n" -msgstr "Datei wurde als `%s' gespeichert.\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:426 -msgid "# peers known" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:468 -#, c-format -msgid "" -"File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "" -"Die Datei »%s« im Verzeichnis »%s« entspricht nicht der Namenskonvention. " -"Die Datei wurde entfernt.\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:624 -#, fuzzy, c-format -msgid "Scanning directory `%s'\n" -msgstr "==> Verzeichnis `%s':\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:631 -#, fuzzy, c-format -msgid "Still no peers found in `%s'!\n" -msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1024 -#, fuzzy, c-format -msgid "Cleaning up directory `%s'\n" -msgstr "==> Verzeichnis `%s':\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1319 -#, c-format -msgid "Importing HELLOs from `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1332 -msgid "Skipping import of included HELLOs\n" -msgstr "" - -#: src/peerinfo/peerinfo_api.c:217 -#, fuzzy -msgid "Failed to receive response from `PEERINFO' service." -msgstr "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n" - #: src/peerstore/gnunet-peerstore.c:92 msgid "peerstore" msgstr "" @@ -5965,7 +5990,7 @@ msgstr "" msgid "re:claimID command line tool" msgstr "" -#: src/reclaim/plugin_rest_openid_connect.c:2618 +#: src/reclaim/plugin_rest_openid_connect.c:2613 #, fuzzy msgid "OpenID Connect REST API initialized\n" msgstr " Verbindung fehlgeschlagen\n" @@ -6120,117 +6145,134 @@ msgstr "" msgid "Internal error, key revocation might have failed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:251 +#: src/revocation/gnunet-revocation.c:252 msgid "Cancelling calculation.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:296 +#: src/revocation/gnunet-revocation.c:299 #, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:335 +#: src/revocation/gnunet-revocation.c:339 #, fuzzy, c-format msgid "Ego `%s' not found.\n" msgstr "Kommando `%s' wurde nicht gefunden!\n" -#: src/revocation/gnunet-revocation.c:349 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:359 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "" -#: src/revocation/gnunet-revocation.c:371 +#: src/revocation/gnunet-revocation.c:378 msgid "Continuing calculation where left off...\n" msgstr "" -#: src/revocation/gnunet-revocation.c:378 +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "" -#: src/revocation/gnunet-revocation.c:416 +#: src/revocation/gnunet-revocation.c:423 #, c-format msgid "Public key `%s' malformed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:426 +#: src/revocation/gnunet-revocation.c:433 msgid "" "Testing and revoking at the same time is not allowed, only executing test.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:456 +#: src/revocation/gnunet-revocation.c:463 msgid "No filename to store revocation certificate given.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:471 +#: src/revocation/gnunet-revocation.c:480 #, fuzzy, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" -#: src/revocation/gnunet-revocation.c:493 +#: src/revocation/gnunet-revocation.c:488 +#, fuzzy, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" + +#: src/revocation/gnunet-revocation.c:510 #, fuzzy msgid "No action specified. Nothing to do.\n" msgstr "Keine Kommandos angegeben.\n" -#: src/revocation/gnunet-revocation.c:512 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "" -#: src/revocation/gnunet-revocation.c:520 +#: src/revocation/gnunet-revocation.c:537 msgid "" "revoke the private key associated for the the private key associated with " "the ego NAME " msgstr "" -#: src/revocation/gnunet-revocation.c:527 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "" -#: src/revocation/gnunet-revocation.c:534 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "" -#: src/revocation/gnunet-revocation.c:540 +#: src/revocation/gnunet-revocation.c:557 #, fuzzy msgid "number of epochs to calculate for" msgstr "Anzahl an Durchläufen" -#: src/revocation/gnunet-service-revocation.c:454 +#: src/revocation/gnunet-service-revocation.c:494 msgid "# unsupported revocations received via set union" msgstr "" -#: src/revocation/gnunet-service-revocation.c:464 +#: src/revocation/gnunet-service-revocation.c:504 #, fuzzy msgid "# revocation messages received via set union" msgstr "# verschlüsselter PING Nachrichten empfangen" -#: src/revocation/gnunet-service-revocation.c:469 +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:473 +#: src/revocation/gnunet-service-revocation.c:513 #, fuzzy msgid "# revocation set unions failed" msgstr " Verbindung fehlgeschlagen\n" -#: src/revocation/gnunet-service-revocation.c:481 +#: src/revocation/gnunet-service-revocation.c:521 #, fuzzy msgid "# revocation set unions completed" msgstr "# Klartext PONG Nachrichten empfangen" -#: src/revocation/gnunet-service-revocation.c:519 +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:871 +#: src/revocation/gnunet-service-revocation.c:912 #, fuzzy msgid "Could not open revocation database file!" msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n" +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" + +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" + +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" + #: src/rps/gnunet-rps-profiler.c:3200 msgid "duration of the profiling" msgstr "" @@ -6248,18 +6290,6 @@ msgstr "Anzahl an Durchläufen" msgid "Measure quality and performance of the RPS service." msgstr "" -#: src/rps/gnunet-rps.c:270 -msgid "Seed a PeerID" -msgstr "" - -#: src/rps/gnunet-rps.c:275 -msgid "Get updates of view (0 for infinite updates)" -msgstr "" - -#: src/rps/gnunet-rps.c:279 -msgid "Get peers from biased stream" -msgstr "" - #: src/scalarproduct/gnunet-scalarproduct.c:229 #, fuzzy msgid "You must specify at least one message ID to check!\n" @@ -6315,10 +6345,10 @@ msgstr "" msgid "Calculate the Vectorproduct with a GNUnet peer." msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #, fuzzy msgid "Connect to CADET failed\n" msgstr " Verbindung fehlgeschlagen\n" @@ -6344,7 +6374,7 @@ msgid "also profile decryption" msgstr "" #: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 -#: src/setu/gnunet-service-setu.c:3635 +#: src/setu/gnunet-service-setu.c:3633 #, fuzzy msgid "Could not connect to CADET service\n" msgstr "Verbindung zum %s-Dienst ist fehlgeschlagen!\n" @@ -6673,17 +6703,6 @@ msgstr "" msgid "%.s Unknown result code." msgstr "" -#: src/testbed/gnunet-testbed-profiler.c:290 -msgid "tolerate COUNT number of continious timeout failures" -msgstr "" - -#: src/testbed/gnunet-testbed-profiler.c:295 -msgid "" -"run profiler in non-interactive mode where upon testbed setup the profiler " -"does not wait for a keystroke but continues to run until a termination " -"signal is received" -msgstr "" - #: src/testbed/gnunet_testbed_mpi_spawn.c:119 #, fuzzy msgid "Waiting for child to exit.\n" @@ -6696,6 +6715,17 @@ msgstr "" msgid "Spawning process `%s'\n" msgstr "Ungültige Antwort auf `%s'.\n" +#: src/testbed/gnunet-testbed-profiler.c:290 +msgid "tolerate COUNT number of continious timeout failures" +msgstr "" + +#: src/testbed/gnunet-testbed-profiler.c:295 +msgid "" +"run profiler in non-interactive mode where upon testbed setup the profiler " +"does not wait for a keystroke but continues to run until a termination " +"signal is received" +msgstr "" + #: src/testbed/testbed_api.c:399 #, fuzzy, c-format msgid "Adding host %u failed with error: %s\n" @@ -6816,9 +6846,9 @@ msgid "Topology file needs more peers than given ones\n" msgstr "" #: src/testbed/testbed_api_topology.c:1153 -#, c-format -msgid "Ignoring to connect peer %u to peer %u\n" -msgstr "" +#, fuzzy, c-format +msgid "Ignoring to connect peer %lu to peer %lu\n" +msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" #: src/testing/gnunet-testing.c:185 #, c-format @@ -6989,7 +7019,7 @@ msgid "GNUnet topology control" msgstr "" #: src/transport/gnunet-communicator-tcp.c:3221 -#: src/transport/gnunet-communicator-udp.c:2995 +#: src/transport/gnunet-communicator-udp.c:3076 #: src/transport/gnunet-service-tng.c:10014 #: src/transport/gnunet-service-transport.c:2626 msgid "Transport service is lacking key configuration settings. Exiting.\n" @@ -6999,7 +7029,7 @@ msgstr "" msgid "GNUnet TCP communicator" msgstr "" -#: src/transport/gnunet-communicator-udp.c:3067 +#: src/transport/gnunet-communicator-udp.c:3148 msgid "GNUnet UDP communicator" msgstr "" @@ -7024,6 +7054,10 @@ msgstr "Pfad zu »%s« kann nicht erstellt werden\n" msgid "GNUnet UNIX domain socket communicator" msgstr "" +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + #: src/transport/gnunet-service-transport.c:445 msgid "# messages dropped due to slow client" msgstr "" @@ -7064,10 +7098,6 @@ msgstr "" msgid "Adding blacklisting entry for peer `%s':`%s'\n" msgstr "" -#: src/transport/gnunet-service-transport_ats.c:137 -msgid "# Addresses given to ATS" -msgstr "" - #: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "" @@ -7393,43 +7423,6 @@ msgstr "" msgid "# HELLOs given to peerinfo" msgstr "" -#: src/transport/gnunet-transport-profiler.c:220 -#, c-format -msgid "%llu B in %llu ms == %.2f KB/s!\n" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:577 -msgid "send data to peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:581 -#, fuzzy -msgid "receive data from peer" -msgstr "# Bytes des Typs %d empfangen" - -#: src/transport/gnunet-transport-profiler.c:586 -msgid "iterations" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:591 -#, fuzzy -msgid "number of messages to send" -msgstr "Anzahl an Durchläufen" - -#: src/transport/gnunet-transport-profiler.c:596 -msgid "message size to use" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:601 -#: src/transport/gnunet-transport.c:1404 -msgid "peer identity" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:614 -#: src/transport/gnunet-transport.c:1426 -msgid "Direct access to transport service." -msgstr "Direkter Zugriff auf den Transportdienst" - #: src/transport/gnunet-transport.c:406 #, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" @@ -7562,6 +7555,11 @@ msgstr "" msgid "do not resolve hostnames" msgstr "Keine Rechnernamen auflösen" +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 +msgid "peer identity" +msgstr "" + #: src/transport/gnunet-transport.c:1408 msgid "monitor plugin sessions" msgstr "" @@ -7570,7 +7568,39 @@ msgstr "" msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "" -#: src/transport/plugin_transport_http_client.c:1489 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 +msgid "Direct access to transport service." +msgstr "Direkter Zugriff auf den Transportdienst" + +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:581 +#, fuzzy +msgid "receive data from peer" +msgstr "# Bytes des Typs %d empfangen" + +#: src/transport/gnunet-transport-profiler.c:586 +msgid "iterations" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:591 +#, fuzzy +msgid "number of messages to send" +msgstr "Anzahl an Durchläufen" + +#: src/transport/gnunet-transport-profiler.c:596 +msgid "message size to use" +msgstr "" + +#: src/transport/plugin_transport_http_client.c:1488 #: src/transport/plugin_transport_http_server.c:2331 #: src/transport/plugin_transport_http_server.c:3562 #: src/transport/plugin_transport_tcp.c:3773 @@ -7578,24 +7608,24 @@ msgstr "" msgid "TCP_STEALTH not supported on this platform.\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2141 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2190 +#: src/transport/plugin_transport_http_client.c:2189 #: src/transport/plugin_transport_http_server.c:3276 #, fuzzy, c-format msgid "Shutting down plugin `%s'\n" msgstr "Collection `%s' begonnen.\n" -#: src/transport/plugin_transport_http_client.c:2207 +#: src/transport/plugin_transport_http_client.c:2206 #: src/transport/plugin_transport_http_server.c:3346 #, fuzzy, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "GNUnet wurde erfolgreich heruntergefahren.\n" -#: src/transport/plugin_transport_http_client.c:2241 +#: src/transport/plugin_transport_http_client.c:2240 #, fuzzy, c-format msgid "Maximum number of requests is %u\n" msgstr "Maximale Anzahl der Verbindungen ist %u\n" @@ -7604,7 +7634,7 @@ msgstr "Maximale Anzahl der Verbindungen ist %u\n" #, c-format msgid "" "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " -"size %u\n" +"size %lu\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2040 @@ -7643,7 +7673,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2935 -#: src/transport/plugin_transport_udp.c:3397 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -7842,68 +7872,68 @@ msgstr "" msgid "TCP transport advertises itself as being on port %llu\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3169 +#: src/transport/plugin_transport_udp_broadcasting.c:169 +#, fuzzy +msgid "# Multicast HELLO beacons received via UDP" +msgstr "# Bytes empfangen über TCP" + +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:571 +#, fuzzy, c-format +msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" +msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" + +#: src/transport/plugin_transport_udp.c:3170 #, c-format msgid "" "UDP could not transmit message to `%s': Network seems down, please check " "your network configuration\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3182 +#: src/transport/plugin_transport_udp.c:3183 msgid "" "UDP could not transmit IPv6 message! Please check your network configuration " "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3465 -#: src/transport/plugin_transport_udp.c:3550 +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "UDP-Sockets können nicht geöffnet werden\n" -#: src/transport/plugin_transport_udp.c:3479 +#: src/transport/plugin_transport_udp.c:3480 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3558 +#: src/transport/plugin_transport_udp.c:3559 msgid "Failed to open UDP sockets\n" msgstr "UDP-Sockets können nicht geöffnet werden\n" -#: src/transport/plugin_transport_udp.c:3628 -#: src/transport/plugin_transport_udp.c:3641 +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3666 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv4 address" msgstr "»%s« ist keine gültige IP-Adresse.\n" -#: src/transport/plugin_transport_udp.c:3688 +#: src/transport/plugin_transport_udp.c:3689 #, fuzzy msgid "must be valid IPv6 address" msgstr "»%s« ist keine gültige IP-Adresse.\n" -#: src/transport/plugin_transport_udp.c:3749 +#: src/transport/plugin_transport_udp.c:3750 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "UDP-Sockets können nicht geöffnet werden\n" -#: src/transport/plugin_transport_udp_broadcasting.c:169 -#, fuzzy -msgid "# Multicast HELLO beacons received via UDP" -msgstr "# Bytes empfangen über TCP" - -#: src/transport/plugin_transport_udp_broadcasting.c:553 -msgid "" -"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:571 -#, fuzzy, c-format -msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" - #: src/transport/plugin_transport_unix.c:1396 #, fuzzy, c-format msgid "Cannot bind to `%s'\n" @@ -8085,7 +8115,7 @@ msgid "do daemonize (detach from terminal)" msgstr "" #: src/transport/tcp_service_legacy.c:1397 -#: src/transport/transport-testing2.c:983 src/util/service.c:2072 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 #: src/util/service.c:2084 #, fuzzy, c-format msgid "Malformed configuration file `%s', exit ...\n" @@ -8144,7 +8174,7 @@ msgstr "" #: src/util/bio.c:359 #, c-format -msgid "String `%s' longer than allowed (%u > %u)" +msgid "String `%s' longer than allowed (%u > %lu)" msgstr "" #: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 @@ -8882,63 +8912,63 @@ msgstr "" msgid "Failed to expand `$HOME': environment variable `HOME' not set" msgstr "" -#: src/util/strings.c:1240 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "IPv6-Adresse beginnt nicht mit »[«\n" -#: src/util/strings.c:1248 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "IPv6-Adresse enthält kein »:« zur Abtrennung der Portnummer\n" -#: src/util/strings.c:1255 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "IPv6-Adresse enthält kein »]« vor »:« zur Abtrennung der Portnummer\n" -#: src/util/strings.c:1263 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "IPv6-Adresse enthält keine gültige Portnummer nach dem letzten »:«\n" -#: src/util/strings.c:1272 +#: src/util/strings.c:1273 #, fuzzy, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "Ungültige Antwort auf `%s' von `%s'\n" -#: src/util/strings.c:1499 src/util/strings.c:1510 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "Port außerhalb des Bereichs\n" -#: src/util/strings.c:1519 +#: src/util/strings.c:1520 #, c-format msgid "Malformed port policy `%s'\n" msgstr "" -#: src/util/strings.c:1602 src/util/strings.c:1631 src/util/strings.c:1678 -#: src/util/strings.c:1698 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "Ungültiges Format für IP: »%s«\n" -#: src/util/strings.c:1656 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "Ungültige Netzwerk-Notation ('/%d ist nicht gültig in IPv4 CIDR)." -#: src/util/strings.c:1707 +#: src/util/strings.c:1708 #, fuzzy, c-format msgid "Invalid format: `%s'\n" msgstr "Ungültiges Format für IP: `%s'\n" -#: src/util/strings.c:1760 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "Ungültige Netzwerk-Notation (endet nicht mit »;«: »%s«)\n" -#: src/util/strings.c:1810 +#: src/util/strings.c:1811 #, fuzzy, c-format msgid "Wrong format `%s' for netmask\n" msgstr "Falsches Format `%s' für Netzmaske: %s\n" -#: src/util/strings.c:1841 +#: src/util/strings.c:1842 #, fuzzy, c-format msgid "Wrong format `%s' for network\n" msgstr "Falsches Format `%s' für Netzwerk: %s\n" @@ -9128,8 +9158,8 @@ msgstr "Dienst wird über UDP angeboten" msgid "Setup tunnels via VPN." msgstr "Tunnel über VPN einrichten." -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:420 -#: src/zonemaster/gnunet-service-zonemaster.c:849 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 #, fuzzy msgid "Failed to connect to the namestore!\n" msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" @@ -9473,10 +9503,6 @@ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" #~ msgid "Could not send list result to client\n" #~ msgstr "Anfrage konnte nicht an gnunetd gesendet werden.\n" -#, fuzzy -#~ msgid "Failed to connect peer 0 and %u\n" -#~ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" - #, fuzzy #~ msgid "Could not connect master [%u] and slave [%u]\n" #~ msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n" diff --git a/po/es.po b/po/es.po index f9a15c50b..eb66c449d 100644 --- a/po/es.po +++ b/po/es.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gnunet 0.9.5a\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2020-10-13 16:12+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2013-02-23 17:50+0100\n" "Last-Translator: Miguel Ángel Arruga Vivas \n" "Language-Team: Spanish \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1303 +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 #, fuzzy, c-format msgid "Ego `%s' not known to identity service\n" msgstr "'%s': servicio desconocido: %s\n" @@ -29,8 +29,8 @@ msgid "Issuer public key `%s' is not well-formed\n" msgstr "El bloque del tipo %u está mal formado\n" #: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 -#: src/namestore/gnunet-namestore-fcfsd.c:1154 #: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 #, c-format msgid "Failed to connect to namestore\n" msgstr "Se produjo un fallo al conectar con el almacén de nombres\n" @@ -525,15 +525,95 @@ msgstr "El servicio «%s» finalizó con estado %s/%d, se reiniciará en %llu ms msgid "Initiating shutdown as requested by client.\n" msgstr "Iniciando apagado bajo petición del cliente.\n" -#: src/ats-tests/ats-testing-log.c:896 -msgid "Stop logging\n" +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 +#, c-format +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" msgstr "" +"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho " +"de banda predeterminado %llu\n" -#: src/ats-tests/ats-testing-log.c:952 -#, fuzzy, c-format -msgid "Start logging `%s'\n" +#: src/ats/gnunet-ats-solver-eval.c:3011 +#, c-format +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +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:3063 +#, c-format +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +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:3552 src/ats-tests/gnunet-solver-eval.c:997 +#, fuzzy +msgid "solver to use" +msgstr "valor a establecer" + +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 +msgid "experiment to use" +msgstr "experimento para usar" + +#: src/ats/gnunet-ats-solver-eval.c:3564 +#, fuzzy +msgid "print logging" msgstr "Iniciando descarga «%s».\n" +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "guarda protocolo al fichero en disco" + +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "deshabilita normalización" + +#: src/ats/gnunet-service-ats_plugins.c:326 +#, fuzzy, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" +"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho " +"de banda predeterminado %llu\n" + +# Miguel: "Inbound" lo he traducido como entrada en todo el texto. +#: src/ats/gnunet-service-ats_plugins.c:336 +#, fuzzy, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "La cuota de entrada configurada para la red «%s» es %llu\n" + +#: src/ats/gnunet-service-ats_plugins.c:382 +#, fuzzy, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" +"No hay configurada una cuota de salida para la red «%s», asignando el ancho " +"de banda predeterminado %llu\n" + +#: src/ats/gnunet-service-ats_plugins.c:474 +#, fuzzy, c-format +msgid "Failed to initialize solver `%s'!\n" +msgstr "¡No se puede inicializar el resolvedor!\n" + +#: src/ats/plugin_ats_proportional.c:1142 +#, fuzzy, c-format +msgid "Invalid %s configuration %f \n" +msgstr "Se produjo un fallo al cargar la configuración de %s\n" + +#: src/ats/plugin_ats_proportional.c:1165 +#, fuzzy, c-format +msgid "Invalid %s configuration %f\n" +msgstr "Se produjo un fallo al cargar la configuración de %s\n" + #: src/ats-tests/ats-testing.c:420 #, c-format msgid "Connected master [%u] with slave [%u]\n" @@ -544,6 +624,15 @@ msgstr "" msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "Fallo al conectar a gnunetd.\n" +#: src/ats-tests/ats-testing-log.c:896 +msgid "Stop logging\n" +msgstr "" + +#: src/ats-tests/ats-testing-log.c:952 +#, fuzzy, c-format +msgid "Start logging `%s'\n" +msgstr "Iniciando descarga «%s».\n" + #: src/ats-tests/gnunet-ats-sim.c:92 #, c-format msgid "" @@ -551,17 +640,6 @@ msgid "" "= %u KiB/s\n" msgstr "" -#: src/ats-tests/gnunet-solver-eval.c:997 src/ats/gnunet-ats-solver-eval.c:3552 -#, fuzzy -msgid "solver to use" -msgstr "valor a establecer" - -#: src/ats-tests/gnunet-solver-eval.c:1003 -#: src/ats-tests/gnunet-solver-eval.c:1008 -#: src/ats/gnunet-ats-solver-eval.c:3557 -msgid "experiment to use" -msgstr "experimento para usar" - # Miguel: ¿Como podría traducir "resolutions" y "resolve"? # Son difíciles de no calcar, puesto que no conozco como expresar # el concepto de obtener una dirección a partir de un nombre @@ -696,84 +774,6 @@ msgstr "salida prolija (incluye las propiedades de direcciones del ATS)" msgid "Print information about ATS state" msgstr "Imprime información acerca del estado del ATS" -#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 -#, c-format -msgid "" -"Could not load quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" -"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho " -"de banda predeterminado %llu\n" - -#: src/ats/gnunet-ats-solver-eval.c:3011 -#, c-format -msgid "" -"No outbound quota configured for network `%s', assigning default bandwidth " -"%llu\n" -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:3063 -#, c-format -msgid "" -"No outbound quota configure for network `%s', assigning default bandwidth " -"%llu\n" -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:3564 -#, fuzzy -msgid "print logging" -msgstr "Iniciando descarga «%s».\n" - -#: src/ats/gnunet-ats-solver-eval.c:3569 -msgid "save logging to disk" -msgstr "guarda protocolo al fichero en disco" - -#: src/ats/gnunet-ats-solver-eval.c:3574 -msgid "disable normalization" -msgstr "deshabilita normalización" - -#: src/ats/gnunet-service-ats_plugins.c:326 -#, fuzzy, c-format -msgid "" -"Could not load %s quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" -"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho " -"de banda predeterminado %llu\n" - -# Miguel: "Inbound" lo he traducido como entrada en todo el texto. -#: src/ats/gnunet-service-ats_plugins.c:336 -#, fuzzy, c-format -msgid "%s quota configured for network `%s' is %llu\n" -msgstr "La cuota de entrada configurada para la red «%s» es %llu\n" - -#: src/ats/gnunet-service-ats_plugins.c:382 -#, fuzzy, c-format -msgid "" -"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "" -"No hay configurada una cuota de salida para la red «%s», asignando el ancho " -"de banda predeterminado %llu\n" - -#: src/ats/gnunet-service-ats_plugins.c:474 -#, fuzzy, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "¡No se puede inicializar el resolvedor!\n" - -#: src/ats/plugin_ats_proportional.c:1142 -#, fuzzy, c-format -msgid "Invalid %s configuration %f \n" -msgstr "Se produjo un fallo al cargar la configuración de %s\n" - -#: src/ats/plugin_ats_proportional.c:1165 -#, fuzzy, c-format -msgid "Invalid %s configuration %f\n" -msgstr "Se produjo un fallo al cargar la configuración de %s\n" - #: src/auction/gnunet-auction-create.c:163 msgid "description of the item to be sold" msgstr "descripción del elemento que está por vender" @@ -812,7 +812,7 @@ msgstr "" #: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 #: src/conversation/gnunet-conversation-test.c:256 -#: src/revocation/gnunet-revocation.c:552 src/template/gnunet-template.c:75 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 msgid "help text" msgstr "texto de ayuda" @@ -916,28 +916,6 @@ msgid "Connection to conversation service lost, trying to reconnect\n" msgstr "" "El cliente se desconectó del servicio principal, tratando de reconectar.\n" -#: src/conversation/gnunet-conversation-test.c:120 -#, c-format -msgid "" -"\n" -"End of transmission. Have a GNU day.\n" -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:146 -#, c-format -msgid "" -"\n" -"We are now playing your recording back. If you can hear it, your audio " -"settings are working..." -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:218 -#, c-format -msgid "" -"We will now be recording you for %s. After that time, the recording will be " -"played back to you..." -msgstr "" - #: src/conversation/gnunet-conversation.c:264 #, c-format msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" @@ -1198,8 +1176,30 @@ msgstr "" msgid "Enables having a conversation with other GNUnet users." msgstr "" -#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#: src/conversation/gnunet-conversation-test.c:120 +#, c-format +msgid "" +"\n" +"End of transmission. Have a GNU day.\n" +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:146 +#, c-format +msgid "" +"\n" +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:218 +#, c-format +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" + #: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 #, c-format msgid "Read error from STDIN: %d %s\n" msgstr "" @@ -1331,7 +1331,7 @@ msgid "Failed to allocate %u bytes for second packet\n" msgstr "" "Se produjo un fallo al alojar las direcciones IP para el nuevo destino\n" -#: src/conversation/gnunet-service-conversation.c:1287 +#: src/conversation/gnunet-service-conversation.c:1286 #, fuzzy, c-format msgid "Could not open line, port %s already in use!\n" msgstr "¡No se pudo conectar al servicio %s!\n" @@ -2069,7 +2069,7 @@ msgstr "" "páginas de %llu bytes de tamaño)\n" #: src/datastore/plugin_datastore_sqlite.c:1316 -#: src/namecache/plugin_namecache_sqlite.c:570 +#: src/namecache/plugin_namecache_sqlite.c:564 #: src/namestore/plugin_namestore_sqlite.c:765 msgid "Sqlite database running\n" msgstr "Base de datos sqlite ejecutándose\n" @@ -2146,25 +2146,74 @@ msgstr "ser prolijo (imprime información de progreso)" msgid "Prints all packets that go through the DHT." msgstr "Imprime todos los paquetes que pasan por la DHT." -#: src/dht/gnunet-dht-put.c:133 -msgid "Must provide KEY and DATA for DHT put!\n" -msgstr "¡Se deben proveer «KEY» y «DATA» para una subida a la DHT!\n" - -#: src/dht/gnunet-dht-put.c:140 +#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 #, fuzzy, c-format -msgid "Could not connect to DHT service!\n" -msgstr "¡No se pudo conectar al servicio %s!\n" +msgid "Exiting as the number of peers is %u\n" +msgstr "El número máximo de conexiones es %u\n" -#: src/dht/gnunet-dht-put.c:151 -#, c-format -msgid "Issuing put request for `%s' with data `%s'!\n" -msgstr "¡Iniciando petición de subida para «%s» con datos «%s»!\n" +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +msgid "number of peers to start" +msgstr "número de pares para empezar" -#: src/dht/gnunet-dht-put.c:187 -msgid "the data to insert under the key" -msgstr "los datos a insertar bajo la clave" +#: src/dht/gnunet_dht_profiler.c:961 +msgid "number of PUTs to perform per peer" +msgstr "" -#: src/dht/gnunet-dht-put.c:193 +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "" +"nombre del fichero con la información de acceso usada para la batería de " +"pruebas" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1023 +#, fuzzy +msgid "Measure quality and performance of the DHT service." +msgstr "Medir la calidad y rendimiento del servicio NSE." + +#: src/dht/gnunet-dht-put.c:133 +msgid "Must provide KEY and DATA for DHT put!\n" +msgstr "¡Se deben proveer «KEY» y «DATA» para una subida a la DHT!\n" + +#: src/dht/gnunet-dht-put.c:140 +#, fuzzy, c-format +msgid "Could not connect to DHT service!\n" +msgstr "¡No se pudo conectar al servicio %s!\n" + +#: src/dht/gnunet-dht-put.c:151 +#, c-format +msgid "Issuing put request for `%s' with data `%s'!\n" +msgstr "¡Iniciando petición de subida para «%s» con datos «%s»!\n" + +#: src/dht/gnunet-dht-put.c:187 +msgid "the data to insert under the key" +msgstr "los datos a insertar bajo la clave" + +#: src/dht/gnunet-dht-put.c:193 msgid "how long to store this entry in the dht (in seconds)" msgstr "cuanto tiempo almacenar esta entrada en la DHT (en segundos)" @@ -2410,62 +2459,14 @@ msgstr "# Entradas añadidas a la tabla de encaminamiento" msgid "# DHT requests combined" msgstr "# Peticiones a la DHT combinadas" -#: src/dht/gnunet_dht_profiler.c:922 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" - -#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 -msgid "number of peers to start" -msgstr "número de pares para empezar" - -#: src/dht/gnunet_dht_profiler.c:961 -msgid "number of PUTs to perform per peer" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 -#: src/testbed/gnunet-testbed-profiler.c:305 -msgid "name of the file with the login information for the testbed" -msgstr "" -"nombre del fichero con la información de acceso usada para la batería de " -"pruebas" - -#: src/dht/gnunet_dht_profiler.c:973 -msgid "delay between rounds for collecting statistics (default: 30 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:979 -msgid "delay to start doing PUTs (default: 1 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:985 -msgid "delay to start doing GETs (default: 5 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:990 -msgid "replication degree for DHT PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:996 -msgid "chance that a peer is selected at random for PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1002 -msgid "timeout for DHT PUT and GET requests (default: 1 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1023 -#, fuzzy -msgid "Measure quality and performance of the DHT service." -msgstr "Medir la calidad y rendimiento del servicio NSE." - #: src/dht/plugin_block_dht.c:189 #, c-format msgid "Block not of type %u\n" msgstr "El bloque no es del tipo %u\n" #: src/dht/plugin_block_dht.c:198 -msgid "Size mismatch for block\n" +#, fuzzy, c-format +msgid "Size mismatch for block with type %u\n" msgstr "Discrepancias de tamaños para el bloque\n" #: src/dht/plugin_block_dht.c:209 @@ -2928,10 +2929,10 @@ msgstr "" "«%s»\n" #: src/fs/fs_download.c:1053 -#, c-format +#, fuzzy, c-format msgid "" -"Internal error or bogus download URI (expected %u bytes at depth %u and " -"offset %llu/%llu, got %u bytes)" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" msgstr "" "Error interno o URI de descarga defectuosa (se esperaban %u bytes a " "profundidad %u y desplazamiento %llu/%llu, se obtuvieron %u bytes)" @@ -3287,7 +3288,7 @@ msgstr "" "Debes especificar uno y solo un nombre de directorio para publicación " "automática.\n" -#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:888 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "establece el nivel LEVEL deseado de anonimato del emisor" @@ -3296,15 +3297,15 @@ msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "" "deshabilitar añadir tiempo de creación a los metadatos del fichero subido" -#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:893 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "no usar libextractor para añadir palabras clave o metadatos" -#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:938 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "especificar la prioridad del contenido" -#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:951 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "establece el nivel LEVEL deseado de replicación" @@ -3387,7 +3388,7 @@ msgstr "Estado inesperado: %d\n" msgid "You need to specify a URI argument.\n" msgstr "Tiene que especificar una URI como parámetro.\n" -#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:707 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, c-format msgid "Failed to parse URI: %s\n" msgstr "Se produjo un fallo al procesar la URI: %s\n" @@ -3400,7 +3401,7 @@ msgstr "Sólo URI «CHK» o «LOC» soportadas.\n" msgid "Target filename must be specified.\n" msgstr "El nombre de fichero de destino debe ser especificado.\n" -#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:861 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 #: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, c-format msgid "Could not initialize `%s' subsystem.\n" @@ -3442,6 +3443,14 @@ msgstr "" "Descargar ficheros de GNUnet usando una URI GNUnet CHK o LOC (gnunet://fs/" "chk/...)" +#: src/fs/gnunet-fs.c:128 +msgid "print a list of all indexed files" +msgstr "imprimir una lista de todos los ficheros indexados" + +#: src/fs/gnunet-fs.c:141 +msgid "Special file-sharing operations" +msgstr "Operaciones especiales de compartición de ficheros" + #: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "ejecuta el experimento con «COUNT» pares" @@ -3462,14 +3471,6 @@ msgstr "" "ejecuta una batería de pruebas para medir el rendimiento de la compartición " "de ficheros" -#: src/fs/gnunet-fs.c:128 -msgid "print a list of all indexed files" -msgstr "imprimir una lista de todos los ficheros indexados" - -#: src/fs/gnunet-fs.c:141 -msgid "Special file-sharing operations" -msgstr "Operaciones especiales de compartición de ficheros" - #: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" @@ -3520,58 +3521,58 @@ msgstr "Metadatos para el fichero «%s» (%s)\n" msgid "Keywords for file `%s' (%s)\n" msgstr "Palabras clave para el fichero «%s» (%s)\n" -#: src/fs/gnunet-publish.c:577 +#: src/fs/gnunet-publish.c:582 msgid "Could not publish\n" msgstr "No se pudo publicar\n" -#: src/fs/gnunet-publish.c:603 +#: src/fs/gnunet-publish.c:611 msgid "Could not start publishing.\n" msgstr "No se pudo empezar a publicar.\n" -#: src/fs/gnunet-publish.c:636 +#: src/fs/gnunet-publish.c:644 #, c-format msgid "Scanning directory `%s'.\n" msgstr "Escaneando directorio «%s».\n" -#: src/fs/gnunet-publish.c:638 +#: src/fs/gnunet-publish.c:646 #, c-format msgid "Scanning file `%s'.\n" msgstr "Escaneando fichero «%s».\n" -#: src/fs/gnunet-publish.c:644 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "Hubo un problema procesando el fichero «%s», omitiéndolo.\n" -#: src/fs/gnunet-publish.c:650 +#: src/fs/gnunet-publish.c:658 msgid "Preprocessing complete.\n" msgstr "Preprocesado completo.\n" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:664 #, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "Extracción de metadatos del fichero «%s» completa.\n" -#: src/fs/gnunet-publish.c:662 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "La extracción de metadatos ha finalizado.\n" -#: src/fs/gnunet-publish.c:670 +#: src/fs/gnunet-publish.c:678 #, fuzzy msgid "Error scanning directory.\n" msgstr "Error interno escaneando directorio.\n" -#: src/fs/gnunet-publish.c:697 +#: src/fs/gnunet-publish.c:705 #, fuzzy, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "Espacio de nombres «%s» desconocido.\n" -#: src/fs/gnunet-publish.c:729 +#: src/fs/gnunet-publish.c:737 #, c-format msgid "Failed to access `%s': %s\n" msgstr "Se produjo un fallo al acceder «%s»: %s\n" -#: src/fs/gnunet-publish.c:746 +#: src/fs/gnunet-publish.c:754 msgid "" "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " "installed?\n" @@ -3579,39 +3580,39 @@ msgstr "" "Se produjo un fallo al iniciar el meta-escáner de directorios. ¿Está " "«gnunet-helper-publish-fs» instalado?\n" -#: src/fs/gnunet-publish.c:802 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "¡No se pueden extraer metadatos de una URI!\n" -#: src/fs/gnunet-publish.c:809 +#: src/fs/gnunet-publish.c:817 #, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "Se debe especificar uno y solo un nombre de fichero para insertar.\n" -#: src/fs/gnunet-publish.c:815 +#: src/fs/gnunet-publish.c:823 #, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "No se puede especificar una URI y un nombre de fichero.\n" -#: src/fs/gnunet-publish.c:824 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "La opción «%s» es obligatoria cuando se usa la opción «%s».\n" -#: src/fs/gnunet-publish.c:836 src/fs/gnunet-publish.c:845 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 #: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "La opción «%s» no tiene sentido sin la opción «%s».\n" -#: src/fs/gnunet-publish.c:898 +#: src/fs/gnunet-publish.c:906 #, fuzzy msgid "enable adding the creation time to the metadata of the uploaded file" msgstr "" "deshabilitar añadir tiempo de creación a los metadatos del fichero subido" -#: src/fs/gnunet-publish.c:904 +#: src/fs/gnunet-publish.c:912 msgid "" "print list of extracted keywords that would be used, but do not perform " "upload" @@ -3619,7 +3620,7 @@ msgstr "" "imprimir una lista de las palabras clave extraídas que podrían ser usadas, " "pero sin realizar la subida" -#: src/fs/gnunet-publish.c:912 +#: src/fs/gnunet-publish.c:920 msgid "" "add an additional keyword for the top-level file or directory (this option " "can be specified multiple times)" @@ -3627,11 +3628,11 @@ msgstr "" "añadir una palabra clave adicional para el fichero del nivel más alto o el " "directorio (esta opción puede ser especificada varias veces)" -#: src/fs/gnunet-publish.c:919 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "establece los metadatos para el tipo TYPE dado al valor VALUE dado" -#: src/fs/gnunet-publish.c:924 +#: src/fs/gnunet-publish.c:932 msgid "" "do not index, perform full insertion (stores entire file in encrypted form " "in GNUnet database)" @@ -3639,7 +3640,7 @@ msgstr "" "no indexar, hacer inserciones totales (almacena el fichero entero de forma " "cifrada en la base de datos de GNUnet)" -#: src/fs/gnunet-publish.c:931 +#: src/fs/gnunet-publish.c:939 msgid "" "specify ID of an updated version to be published in the future (for " "namespace insertions only)" @@ -3647,13 +3648,13 @@ msgstr "" "especificar la ID de una versión actualizada para ser publicada en el futuro " "(para inserciones en el espacio de nombres únicamente)" -#: src/fs/gnunet-publish.c:944 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" msgstr "" "publicar los ficheros bajo el seudónimo NAME (coloca el fichero en el " "espacio)" -#: src/fs/gnunet-publish.c:956 +#: src/fs/gnunet-publish.c:964 msgid "" "only simulate the process but do not do any actual publishing (useful to " "compute URIs)" @@ -3661,14 +3662,14 @@ msgstr "" "únicamente simular el proceso pero no publicar nada realmente (útil para " "calcular URI)" -#: src/fs/gnunet-publish.c:963 +#: src/fs/gnunet-publish.c:971 msgid "" "set the ID of this version of the publication (for namespace insertions only)" msgstr "" "establece la ID de esta versión de la publicación (para inserciones en el " "espacio únicamente)" -#: src/fs/gnunet-publish.c:971 +#: src/fs/gnunet-publish.c:979 msgid "" "URI to be published (can be used instead of passing a file to add keywords " "to the file with the respective URI)" @@ -3676,7 +3677,7 @@ msgstr "" "URI a ser publicada (puede ser usado en vez de pasar un fichero para añadir " "claves con el fichero con la URI respectiva)" -#: src/fs/gnunet-publish.c:989 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "Publicar un fichero o un directorio en GNUnet" @@ -4082,7 +4083,7 @@ msgstr "No se pudo empezar la operación de desindexado.\n" msgid "Unindex a file that was previously indexed with gnunet-publish." msgstr "Desindexa un fichero previamente indexado con «gnunet-publish»." -#: src/gns/gns_tld_api.c:292 +#: src/gns/gns_tld_api.c:293 msgid "Expected a base32-encoded public zone key\n" msgstr "" @@ -4168,7 +4169,54 @@ msgstr "¿cuánto tiempo se debe ejecutar? 0 = para siempre" msgid "look for GNS2DNS records instead of ANY" msgstr "" -#: src/gns/gnunet-gns-import.c:486 +#: src/gns/gnunet-gns.c:257 +#, fuzzy, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "«%s» no es una dirección IP válida.\n" + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 +#, c-format +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "" +"Se produjo un fallo al convertir el nombre en formato DNS IDNA «%s» a UTF-8: " +"%s\n" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" + +#: src/gns/gnunet-gns.c:305 +#, c-format +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" + +#: src/gns/gnunet-gns.c:340 +msgid "Lookup a record for the given name" +msgstr "Buscar el registro para el nombre dado" + +#: src/gns/gnunet-gns.c:346 +msgid "Specify the type of the record to lookup" +msgstr "Especificar el tipo del registro a buscar" + +#: src/gns/gnunet-gns.c:352 +#, fuzzy +msgid "Specify a timeout for the lookup" +msgstr "Especificar el tipo del registro a buscar" + +#: src/gns/gnunet-gns.c:356 +msgid "No unneeded output" +msgstr "Sin salida innecesaria" + +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" + +#: src/gns/gnunet-gns.c:375 +#, fuzzy +msgid "GNUnet GNS resolver tool" +msgstr "Herramienta de acceso GNUnet GNS" + +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "" @@ -4288,53 +4336,6 @@ msgstr "" msgid "GNUnet GNS proxy" msgstr "Proxy GNUnet GNS" -#: src/gns/gnunet-gns.c:257 -#, fuzzy, c-format -msgid "`%s' is not a valid DNS domain name\n" -msgstr "«%s» no es una dirección IP válida.\n" - -#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 -#, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "" -"Se produjo un fallo al convertir el nombre en formato DNS IDNA «%s» a UTF-8: " -"%s\n" - -#: src/gns/gnunet-gns.c:281 -msgid "Cannot resolve using GNS: GNUnet peer not running\n" -msgstr "" - -#: src/gns/gnunet-gns.c:305 -#, c-format -msgid "Invalid typename specified, assuming `ANY'\n" -msgstr "" - -#: src/gns/gnunet-gns.c:340 -msgid "Lookup a record for the given name" -msgstr "Buscar el registro para el nombre dado" - -#: src/gns/gnunet-gns.c:346 -msgid "Specify the type of the record to lookup" -msgstr "Especificar el tipo del registro a buscar" - -#: src/gns/gnunet-gns.c:352 -#, fuzzy -msgid "Specify a timeout for the lookup" -msgstr "Especificar el tipo del registro a buscar" - -#: src/gns/gnunet-gns.c:356 -msgid "No unneeded output" -msgstr "Sin salida innecesaria" - -#: src/gns/gnunet-gns.c:361 -msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" -msgstr "" - -#: src/gns/gnunet-gns.c:375 -#, fuzzy -msgid "GNUnet GNS resolver tool" -msgstr "Herramienta de acceso GNUnet GNS" - #: src/gns/gnunet-service-gns.c:505 #, fuzzy msgid "Properly base32-encoded public key required" @@ -4346,8 +4347,8 @@ msgid "Failed to connect to the namecache!\n" msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n" #: src/gns/gnunet-service-gns.c:560 -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:444 -#: src/zonemaster/gnunet-service-zonemaster.c:887 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 msgid "Could not connect to DHT!\n" msgstr "¡No se pudo conectar a la DHT!\n" @@ -4391,68 +4392,72 @@ msgstr "" msgid "VPN returned empty result for `%s'\n" msgstr "El ATS devolvió resultados para %u direcciones\n" -#: src/gns/gnunet-service-gns_resolver.c:1909 +#: src/gns/gnunet-service-gns_resolver.c:1910 #, c-format msgid "Name `%s' cannot be converted to IDNA." msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1922 +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1965 +#: src/gns/gnunet-service-gns_resolver.c:1966 #, fuzzy, c-format msgid "GNS lookup failed (zero records found for `%s')\n" msgstr "No se han encontrado ficheros en «%s»\n" -#: src/gns/gnunet-service-gns_resolver.c:2385 +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2408 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, fuzzy, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "Se produjo un fallo al mandar la petición DNS a %s\n" -#: src/gns/gnunet-service-gns_resolver.c:2576 +#: src/gns/gnunet-service-gns_resolver.c:2581 #, c-format msgid "GNS namecache returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2716 +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:167 -#, c-format -msgid "Unable to parse PKEY record `%s'\n" -msgstr "No se pudo procesar el registro PKEY «%s»\n" +#: src/gns/plugin_gnsrecord_gns.c:174 +#, fuzzy, c-format +msgid "Unable to parse zone key record `%s'\n" +msgstr "No se pudo procesar el registro MX «%s»\n" -#: src/gns/plugin_gnsrecord_gns.c:197 +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" +msgstr "" + +#: src/gns/plugin_gnsrecord_gns.c:213 #, fuzzy, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "No se pudo procesar el registro SOA «%s»\n" -#: src/gns/plugin_gnsrecord_gns.c:213 +#: src/gns/plugin_gnsrecord_gns.c:229 #, fuzzy, c-format msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "" "Se produjo un fallo al escribir el directorio con los resultados de búsqueda " "de «%s»\n" -#: src/gns/plugin_gnsrecord_gns.c:237 +#: src/gns/plugin_gnsrecord_gns.c:253 #, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "No se pudo procesar la cadena de registro VPN «%s»\n" -#: src/gns/plugin_gnsrecord_gns.c:269 +#: src/gns/plugin_gnsrecord_gns.c:285 #, fuzzy, c-format msgid "Unable to parse BOX record string `%s'\n" msgstr "No se pudo procesar la cadena de registro VPN «%s»\n" -#: src/gns/plugin_rest_gns.c:447 +#: src/gns/plugin_rest_gns.c:448 #, fuzzy msgid "Gns REST API initialized\n" msgstr "Conexión fallida\n" @@ -4788,7 +4793,7 @@ msgid "# hostlist URIs written to file" msgstr "# URI de listas de máquinas escritas a fichero" #: src/hostlist/gnunet-daemon-hostlist_client.c:1657 -#: src/transport/plugin_transport_http_client.c:2301 +#: src/transport/plugin_transport_http_client.c:2300 #, c-format msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" msgstr "" @@ -4924,41 +4929,45 @@ msgid "Could not start hostlist HTTP server on port %u\n" msgstr "" "No se pudo arrancar un servidor de listas de máquinas HTTP en el puerto %u\n" -#: src/identity/gnunet-identity.c:209 +#: src/identity/gnunet-identity.c:214 #, fuzzy, c-format msgid "Failed to create ego: %s\n" msgstr "Se produjo un fallo al crear la página para «%s»\n" -#: src/identity/gnunet-identity.c:250 +#: src/identity/gnunet-identity.c:255 #, fuzzy, c-format msgid "Failed to set default ego: %s\n" msgstr "Se produjo un fallo al crear la página para «%s»\n" -#: src/identity/gnunet-identity.c:446 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "" -#: src/identity/gnunet-identity.c:451 +#: src/identity/gnunet-identity.c:467 #, fuzzy msgid "delete ego NAME " msgstr "borrar un nombre de espacio de nombres (NAME)" -#: src/identity/gnunet-identity.c:457 +#: src/identity/gnunet-identity.c:473 msgid "" "set the private key for the identity to PRIVATE_KEY (use together with -C)" msgstr "" -#: src/identity/gnunet-identity.c:461 +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + +#: src/identity/gnunet-identity.c:482 #, fuzzy msgid "display all egos" msgstr "mostrar registros" -#: src/identity/gnunet-identity.c:465 +#: src/identity/gnunet-identity.c:486 #, fuzzy msgid "reduce output" msgstr "Sin salida innecesaria" -#: src/identity/gnunet-identity.c:472 +#: src/identity/gnunet-identity.c:493 msgid "" "set default identity to NAME for a subsystem SUBSYSTEM (use together with -" "s) or restrict results to NAME (use together with -d)" @@ -4966,21 +4975,21 @@ msgstr "" # Miguel: Aquí he dejado monitorización porque esto es # del servicio de traducción de direcciones. -#: src/identity/gnunet-identity.c:476 +#: src/identity/gnunet-identity.c:497 #, fuzzy msgid "run in monitor mode egos" msgstr "modo de monitorización" -#: src/identity/gnunet-identity.c:480 +#: src/identity/gnunet-identity.c:501 msgid "display private keys as well" msgstr "" -#: src/identity/gnunet-identity.c:487 +#: src/identity/gnunet-identity.c:508 msgid "" "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" msgstr "" -#: src/identity/gnunet-identity.c:502 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "" @@ -5018,27 +5027,27 @@ msgstr "El registro ya existía en el almacén de nombres" msgid "no matching ego found" msgstr "" -#: src/identity/gnunet-service-identity.c:1072 +#: src/identity/gnunet-service-identity.c:1133 #, fuzzy, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "Se produjo un fallo al procesar la identidad del par «%s»\n" -#: src/identity/gnunet-service-identity.c:1130 +#: src/identity/gnunet-service-identity.c:1191 #, fuzzy, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n" -#: src/identity/gnunet-service-identity.c:1139 +#: src/identity/gnunet-service-identity.c:1200 #, fuzzy, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "Se produjo un fallo al leer el directorio «%s»\n" -#: src/identity/plugin_rest_identity.c:1384 +#: src/identity/plugin_rest_identity.c:1385 #, fuzzy msgid "Identity REST API initialized\n" msgstr "Conexión fallida\n" -#: src/json/json.c:133 +#: src/json/json.c:139 #, fuzzy, c-format msgid "Failed to parse JSON in option `%s': %s (%s)\n" msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" @@ -5083,7 +5092,7 @@ msgstr "Parámetro no válido «%s»\n" msgid "You must specify a name\n" msgstr "¡Debes especificar un receptor!\n" -#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1640 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "nombre del registro a añadir/borrar/mostrar" @@ -5092,23 +5101,23 @@ msgstr "nombre del registro a añadir/borrar/mostrar" msgid "specifies the public key of the zone to look in" msgstr "Especificar el tipo del registro a buscar" -#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1701 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 msgid "GNUnet zone manipulation tool" msgstr "Herramienta de manipulación de zona de GNUnet" -#: src/namecache/namecache_api.c:293 +#: src/namecache/namecache_api.c:285 #, fuzzy msgid "Namecache failed to cache block" msgstr "El almacén de nombres no pudo añadir el registro" # Miguel: ¿Conectar y conexión? -#: src/namecache/namecache_api.c:381 +#: src/namecache/namecache_api.c:373 #, fuzzy msgid "Error communicating with namecache service" msgstr "Error al comunicar con el servicio ARM.\n" #: src/namecache/plugin_namecache_flat.c:118 -#: src/namecache/plugin_namecache_flat.c:256 +#: src/namecache/plugin_namecache_flat.c:253 #: src/namestore/plugin_namestore_flat.c:176 #: src/namestore/plugin_namestore_flat.c:424 #: src/peerstore/plugin_peerstore_flat.c:380 @@ -5130,7 +5139,7 @@ msgstr "Se produjo un fallo al crear los índices\n" msgid "Unable to read file: %s.\n" msgstr "Se produjo un fallo al crear los índices\n" -#: src/namecache/plugin_namecache_flat.c:410 +#: src/namecache/plugin_namecache_flat.c:404 #, fuzzy msgid "flat plugin running\n" msgstr "Base de datos sqlite ejecutándose\n" @@ -5143,71 +5152,6 @@ msgstr "Base de datos sqlite ejecutándose\n" msgid "Failed to setup database at `%s'\n" msgstr "Se produjo un fallo al inciar «%s» en «%s»\n" -# form?? -#: src/namestore/gnunet-namestore-fcfsd.c:552 -#, c-format -msgid "Unsupported form value `%s'\n" -msgstr "Forma de valor no soportada «%s»\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:579 -#, c-format -msgid "Failed to create record for domain `%s': %s\n" -msgstr "Se produjo un fallo al crear un registro para el dominio «%s»: %s\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:600 -msgid "Error when mapping zone to name\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:632 -#, c-format -msgid "Found existing name `%s' for the given key\n" -msgstr "Encontrado nombre «%s» para la clave dada\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:694 -#, c-format -msgid "Found %u existing records for domain `%s'\n" -msgstr "Encontrados %u registros para el dominio «%s»\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:784 -#, c-format -msgid "Failed to create page for `%s'\n" -msgstr "Se produjo un fallo al crear la página para «%s»\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:803 -#, c-format -msgid "Failed to setup post processor for `%s'\n" -msgstr "Se produjo un fallo al configurar el post-procesador para «%s»\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:840 -msgid "Domain name must not contain `.'\n" -msgstr "El nombre de dominio no puede contener «.»\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:849 -msgid "Domain name must not contain `+'\n" -msgstr "El nombre de dominio no puede contener «+»\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1084 -msgid "No ego configured for `fcfsd` subsystem\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1115 -msgid "Failed to start HTTP server\n" -msgstr "Se produjo un fallo al iniciar el servidor HTTP\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1163 -#, fuzzy -msgid "Failed to connect to identity\n" -msgstr "Se produjo un fallo al conectar con GNS\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1190 -msgid "name of the zone that is to be managed by FCFSD" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1210 -#, fuzzy -msgid "GNU Name System First Come First Serve name registration service" -msgstr "Servicio de registro GNUnet GNS primero en llegar, primero en servirse" - #: src/namestore/gnunet-namestore.c:334 #, c-format msgid "Adding record failed: %s\n" @@ -5223,11 +5167,17 @@ msgstr "No se pudo borrar el registro: %s\n" msgid "Deleting record failed%s%s\n" msgstr "No se pudo borrar el registro: %s\n" -#: src/namestore/gnunet-namestore.c:656 src/namestore/gnunet-namestore.c:667 +#: src/namestore/gnunet-namestore.c:656 #, c-format msgid "A %s record exists already under `%s', no other records can be added.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:680 #, c-format msgid "" @@ -5235,11 +5185,16 @@ msgid "" "zone.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:696 src/namestore/gnunet-namestore.c:710 +#: src/namestore/gnunet-namestore.c:696 #, c-format msgid "Records already exist under `%s', cannot add `%s' record.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:726 #, c-format msgid "" @@ -5270,7 +5225,7 @@ msgstr "No se han proporcionado opciones\n" #: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 #: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 #: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 -#: src/namestore/gnunet-namestore.c:1229 +#: src/namestore/gnunet-namestore.c:1228 #, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "Falta la opción «%s» para la operación «%s»\n" @@ -5286,7 +5241,7 @@ msgstr "URI no válida: «%s»\n" #: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 #: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 -#: src/namestore/gnunet-namestore.c:1231 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "añadir" @@ -5305,7 +5260,7 @@ msgstr "" msgid "Value `%s' invalid for record type `%s'\n" msgstr "Valor «%s» no válido para el tipo de registro «%s»\n" -#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1238 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, c-format msgid "Invalid time format `%s'\n" msgstr "Formato de tiempo no válido «%s»\n" @@ -5314,23 +5269,23 @@ msgstr "Formato de tiempo no válido «%s»\n" msgid "del" msgstr "borrar" -#: src/namestore/gnunet-namestore.c:1198 +#: src/namestore/gnunet-namestore.c:1197 #, fuzzy, c-format msgid "Invalid public key for reverse lookup `%s'\n" msgstr "Parámetro no válido «%s»\n" -#: src/namestore/gnunet-namestore.c:1221 +#: src/namestore/gnunet-namestore.c:1220 #: src/peerinfo-tool/gnunet-peerinfo.c:736 #, c-format msgid "Invalid URI `%s'\n" msgstr "URI no válida: «%s»\n" -#: src/namestore/gnunet-namestore.c:1291 +#: src/namestore/gnunet-namestore.c:1290 #, c-format msgid "Label `%s' contains `.' which is not allowed\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1341 +#: src/namestore/gnunet-namestore.c:1340 #, c-format msgid "" "No default identity configured for `namestore' subsystem\n" @@ -5338,108 +5293,178 @@ msgid "" "Run gnunet-identity -d to get a list of choices for $NAME\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1406 +#: src/namestore/gnunet-namestore.c:1405 #, fuzzy, c-format msgid "Superfluous command line arguments (starting with `%s') ignored\n" msgstr "Argumentos superfluos (ignorados).\n" -#: src/namestore/gnunet-namestore.c:1435 +#: src/namestore/gnunet-namestore.c:1434 #, fuzzy, c-format msgid "Cannot connect to identity service\n" msgstr "¡No se pudo conectar al servicio %s!\n" -#: src/namestore/gnunet-namestore.c:1482 +#: src/namestore/gnunet-namestore.c:1481 msgid "Empty record line argument is not allowed.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1494 +#: src/namestore/gnunet-namestore.c:1493 #, c-format msgid "Invalid expiration time `%s' (must be without unit)\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1506 src/namestore/gnunet-namestore.c:1522 -#: src/namestore/gnunet-namestore.c:1539 +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 #, fuzzy, c-format msgid "Missing entries in record line `%s'.\n" msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n" -#: src/namestore/gnunet-namestore.c:1514 +#: src/namestore/gnunet-namestore.c:1513 #, fuzzy, c-format msgid "Unknown record type `%s'\n" msgstr "Comando desconocido «%s»\n" -#: src/namestore/gnunet-namestore.c:1552 +#: src/namestore/gnunet-namestore.c:1551 #, fuzzy, c-format msgid "Invalid record data for type %s: `%s'.\n" msgstr "Formato no válido para la IP: «%s»\n" -#: src/namestore/gnunet-namestore.c:1609 +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "añadir registro" -#: src/namestore/gnunet-namestore.c:1612 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "borrar registro" -#: src/namestore/gnunet-namestore.c:1616 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "mostrar registros" -#: src/namestore/gnunet-namestore.c:1623 +#: src/namestore/gnunet-namestore.c:1622 msgid "" "expiration time for record to use (for adding only), \"never\" is possible" msgstr "" "tiempo de expiración del registro a usar (únicamente para añadir), nunca " "(\"never\") es posible" -#: src/namestore/gnunet-namestore.c:1629 +#: src/namestore/gnunet-namestore.c:1628 #, fuzzy msgid "set the desired nick name for the zone" msgstr "establece el nivel LEVEL deseado de replicación" -#: src/namestore/gnunet-namestore.c:1634 +#: src/namestore/gnunet-namestore.c:1633 #, fuzzy msgid "monitor changes in the namestore" msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n" -#: src/namestore/gnunet-namestore.c:1646 +#: src/namestore/gnunet-namestore.c:1645 #, fuzzy msgid "determine our name for the given PKEY" msgstr "establece las preferencias para el par dado" -#: src/namestore/gnunet-namestore.c:1653 +#: src/namestore/gnunet-namestore.c:1652 msgid "" "set record set to values given by (possibly multiple) RECORDLINES; can be " "specified multiple times" msgstr "" -#: src/namestore/gnunet-namestore.c:1659 +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "tipo del registro a añadir/borrar/mostrar" -#: src/namestore/gnunet-namestore.c:1664 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "URI a importar a nuestra zona" -#: src/namestore/gnunet-namestore.c:1670 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "valor del registro a añadir/borrar" -#: src/namestore/gnunet-namestore.c:1674 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "crear o listar registros públicos" -#: src/namestore/gnunet-namestore.c:1680 +#: src/namestore/gnunet-namestore.c:1679 msgid "" "create shadow record (only valid if all other records of the same type have " "expired" msgstr "" -#: src/namestore/gnunet-namestore.c:1686 +#: src/namestore/gnunet-namestore.c:1685 #, fuzzy msgid "name of the ego controlling the zone" msgstr "nombre de la sección a la que acceder" +# form?? +#: src/namestore/gnunet-namestore-fcfsd.c:552 +#, c-format +msgid "Unsupported form value `%s'\n" +msgstr "Forma de valor no soportada «%s»\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:579 +#, c-format +msgid "Failed to create record for domain `%s': %s\n" +msgstr "Se produjo un fallo al crear un registro para el dominio «%s»: %s\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 +#, c-format +msgid "Found existing name `%s' for the given key\n" +msgstr "Encontrado nombre «%s» para la clave dada\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "Error interno escaneando directorio.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:707 +#, c-format +msgid "Found %u existing records for domain `%s'\n" +msgstr "Encontrados %u registros para el dominio «%s»\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:796 +#, c-format +msgid "Failed to create page for `%s'\n" +msgstr "Se produjo un fallo al crear la página para «%s»\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:815 +#, c-format +msgid "Failed to setup post processor for `%s'\n" +msgstr "Se produjo un fallo al configurar el post-procesador para «%s»\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:850 +msgid "Domain name must not contain `.'\n" +msgstr "El nombre de dominio no puede contener «.»\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:859 +msgid "Domain name must not contain `+'\n" +msgstr "El nombre de dominio no puede contener «+»\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1094 +msgid "No ego configured for `fcfsd` subsystem\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1125 +msgid "Failed to start HTTP server\n" +msgstr "Se produjo un fallo al iniciar el servidor HTTP\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1173 +#, fuzzy +msgid "Failed to connect to identity\n" +msgstr "Se produjo un fallo al conectar con GNS\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 +#, fuzzy +msgid "GNU Name System First Come First Serve name registration service" +msgstr "Servicio de registro GNUnet GNS primero en llegar, primero en servirse" + #: src/namestore/gnunet-service-namestore.c:866 #, fuzzy, c-format msgid "Failed to replicate block in namecache: %s\n" @@ -5468,7 +5493,7 @@ msgstr "" msgid "Namestore database file `%s' malformed\n" msgstr "" -#: src/namestore/plugin_namestore_flat.c:789 +#: src/namestore/plugin_namestore_flat.c:792 #, fuzzy msgid "Flat file database running\n" msgstr "Base de datos de plantilla ejecutándose\n" @@ -5773,6 +5798,11 @@ msgstr "comando «external-ip» no encontrado\n" msgid "`upnpc' command not found\n" msgstr "comando «upnpc» no encontrado\n" +#: src/nse/gnunet-nse.c:124 +#, fuzzy +msgid "Show network size estimates from NSE service." +msgstr "# Estimaciones del tamaño de red recibidas" + #: src/nse/gnunet-nse-profiler.c:857 msgid "limit to the number of connections to NSE services, 0 for none" msgstr "límite al número de conexiones a servicios NSE, 0 para ilimitadas" @@ -5798,15 +5828,69 @@ msgstr "retraso entre rondas" msgid "Measure quality and performance of the NSE service." msgstr "Medir la calidad y rendimiento del servicio NSE." -#: src/nse/gnunet-nse.c:124 -#, fuzzy -msgid "Show network size estimates from NSE service." -msgstr "# Estimaciones del tamaño de red recibidas" +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 +msgid "Value is too large.\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:175 +#, c-format +msgid "Removing expired address of transport `%s'\n" +msgstr "Eliminando dirección de transporte «%s»\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:306 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s': %s\n" +msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s'\n" +msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:426 +msgid "# peers known" +msgstr "# pares conocidos" + +#: src/peerinfo/gnunet-service-peerinfo.c:468 +#, c-format +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" +msgstr "" +"El fichero «%s» en el directorio «%s» no sigue la convención de nombres. " +"Eliminado.\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:624 +#, fuzzy, c-format +msgid "Scanning directory `%s'\n" +msgstr "Escaneando directorio «%s».\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:631 +#, c-format +msgid "Still no peers found in `%s'!\n" +msgstr "¡Aún no se han encontrado pares en «%s»!\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:1024 +#, fuzzy, c-format +msgid "Cleaning up directory `%s'\n" +msgstr "Escaneando directorio «%s».\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:1319 +#, c-format +msgid "Importing HELLOs from `%s'\n" +msgstr "Importando HELLO de «%s»\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:1332 +msgid "Skipping import of included HELLOs\n" +msgstr "" -#: src/nse/gnunet-service-nse.c:1443 -#: src/revocation/gnunet-service-revocation.c:834 src/util/gnunet-scrypt.c:257 -msgid "Value is too large.\n" +# Miguel: "Failed to receive" también aquí está traducido como +# "no se obtuvo respuesta" por claridad. +#: src/peerinfo/peerinfo_api.c:217 +msgid "Failed to receive response from `PEERINFO' service." msgstr "" +"No se obtuvo respuesta del servicio de información de pares (PEERINFO)." #: src/peerinfo-tool/gnunet-peerinfo.c:237 #, fuzzy, c-format @@ -5903,65 +5987,6 @@ msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n" msgid "Peerinfo REST API initialized\n" msgstr "Conexión fallida\n" -#: src/peerinfo/gnunet-service-peerinfo.c:175 -#, c-format -msgid "Removing expired address of transport `%s'\n" -msgstr "Eliminando dirección de transporte «%s»\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:306 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s': %s\n" -msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:323 -#: src/peerinfo/gnunet-service-peerinfo.c:348 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s'\n" -msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:426 -msgid "# peers known" -msgstr "# pares conocidos" - -#: src/peerinfo/gnunet-service-peerinfo.c:468 -#, c-format -msgid "" -"File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "" -"El fichero «%s» en el directorio «%s» no sigue la convención de nombres. " -"Eliminado.\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:624 -#, fuzzy, c-format -msgid "Scanning directory `%s'\n" -msgstr "Escaneando directorio «%s».\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:631 -#, c-format -msgid "Still no peers found in `%s'!\n" -msgstr "¡Aún no se han encontrado pares en «%s»!\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1024 -#, fuzzy, c-format -msgid "Cleaning up directory `%s'\n" -msgstr "Escaneando directorio «%s».\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1319 -#, c-format -msgid "Importing HELLOs from `%s'\n" -msgstr "Importando HELLO de «%s»\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1332 -msgid "Skipping import of included HELLOs\n" -msgstr "" - -# Miguel: "Failed to receive" también aquí está traducido como -# "no se obtuvo respuesta" por claridad. -#: src/peerinfo/peerinfo_api.c:217 -msgid "Failed to receive response from `PEERINFO' service." -msgstr "" -"No se obtuvo respuesta del servicio de información de pares (PEERINFO)." - #: src/peerstore/gnunet-peerstore.c:92 msgid "peerstore" msgstr "" @@ -6150,7 +6175,7 @@ msgstr "" msgid "re:claimID command line tool" msgstr "" -#: src/reclaim/plugin_rest_openid_connect.c:2618 +#: src/reclaim/plugin_rest_openid_connect.c:2613 #, fuzzy msgid "OpenID Connect REST API initialized\n" msgstr "Conexión fallida\n" @@ -6320,119 +6345,136 @@ msgstr "" msgid "Internal error, key revocation might have failed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:251 +#: src/revocation/gnunet-revocation.c:252 msgid "Cancelling calculation.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:296 +#: src/revocation/gnunet-revocation.c:299 #, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:335 +#: src/revocation/gnunet-revocation.c:339 #, fuzzy, c-format msgid "Ego `%s' not found.\n" msgstr "Módulo «%s» no encontrado\n" -#: src/revocation/gnunet-revocation.c:349 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:359 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "" -#: src/revocation/gnunet-revocation.c:371 +#: src/revocation/gnunet-revocation.c:378 msgid "Continuing calculation where left off...\n" msgstr "" -#: src/revocation/gnunet-revocation.c:378 +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "" -#: src/revocation/gnunet-revocation.c:416 +#: src/revocation/gnunet-revocation.c:423 #, fuzzy, c-format msgid "Public key `%s' malformed\n" msgstr "El bloque del tipo %u está mal formado\n" -#: src/revocation/gnunet-revocation.c:426 +#: src/revocation/gnunet-revocation.c:433 msgid "" "Testing and revoking at the same time is not allowed, only executing test.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:456 +#: src/revocation/gnunet-revocation.c:463 #, fuzzy msgid "No filename to store revocation certificate given.\n" msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n" -#: src/revocation/gnunet-revocation.c:471 +#: src/revocation/gnunet-revocation.c:480 #, fuzzy, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n" -#: src/revocation/gnunet-revocation.c:493 +#: src/revocation/gnunet-revocation.c:488 +#, fuzzy, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n" + +#: src/revocation/gnunet-revocation.c:510 #, fuzzy msgid "No action specified. Nothing to do.\n" msgstr "Ninguna interfaz especificada, usando la marcada por defecto\n" -#: src/revocation/gnunet-revocation.c:512 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "" -#: src/revocation/gnunet-revocation.c:520 +#: src/revocation/gnunet-revocation.c:537 msgid "" "revoke the private key associated for the the private key associated with " "the ego NAME " msgstr "" -#: src/revocation/gnunet-revocation.c:527 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "" -#: src/revocation/gnunet-revocation.c:534 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "" -#: src/revocation/gnunet-revocation.c:540 +#: src/revocation/gnunet-revocation.c:557 #, fuzzy msgid "number of epochs to calculate for" msgstr "número de pares para empezar" -#: src/revocation/gnunet-service-revocation.c:454 +#: src/revocation/gnunet-service-revocation.c:494 #, fuzzy msgid "# unsupported revocations received via set union" msgstr "Opciones de paquete IPv4 recibidas. Ignoradas.\n" -#: src/revocation/gnunet-service-revocation.c:464 +#: src/revocation/gnunet-service-revocation.c:504 #, fuzzy msgid "# revocation messages received via set union" msgstr "# mensajes «DATA» recibidos vía WLAN" -#: src/revocation/gnunet-service-revocation.c:469 +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:473 +#: src/revocation/gnunet-service-revocation.c:513 #, fuzzy msgid "# revocation set unions failed" msgstr "# sesiones wlan creadas" -#: src/revocation/gnunet-service-revocation.c:481 +#: src/revocation/gnunet-service-revocation.c:521 #, fuzzy msgid "# revocation set unions completed" msgstr "# transmisiones de fragmentos completadas" -#: src/revocation/gnunet-service-revocation.c:519 +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:871 +#: src/revocation/gnunet-service-revocation.c:912 #, fuzzy msgid "Could not open revocation database file!" msgstr "No se pudo conectar con el almacén de datos." +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" + +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" + +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" + #: src/rps/gnunet-rps-profiler.c:3200 #, fuzzy msgid "duration of the profiling" @@ -6454,18 +6496,6 @@ msgstr "número de pares para empezar" msgid "Measure quality and performance of the RPS service." msgstr "Medir la calidad y rendimiento del servicio NSE." -#: src/rps/gnunet-rps.c:270 -msgid "Seed a PeerID" -msgstr "" - -#: src/rps/gnunet-rps.c:275 -msgid "Get updates of view (0 for infinite updates)" -msgstr "" - -#: src/rps/gnunet-rps.c:279 -msgid "Get peers from biased stream" -msgstr "" - #: src/scalarproduct/gnunet-scalarproduct.c:229 #, fuzzy msgid "You must specify at least one message ID to check!\n" @@ -6521,10 +6551,10 @@ msgstr "" msgid "Calculate the Vectorproduct with a GNUnet peer." msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #, fuzzy msgid "Connect to CADET failed\n" msgstr "Conexión fallida (¿bug?)\n" @@ -6550,7 +6580,7 @@ msgid "also profile decryption" msgstr "" #: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 -#: src/setu/gnunet-service-setu.c:3635 +#: src/setu/gnunet-service-setu.c:3633 #, fuzzy msgid "Could not connect to CADET service\n" msgstr "¡No se pudo conectar al servicio %s!\n" @@ -6884,6 +6914,16 @@ msgstr "Petición ignorada porque el ARM se está apagando.\n" msgid "%.s Unknown result code." msgstr "Código de respuesta del ARM desconocido.\n" +#: src/testbed/gnunet_testbed_mpi_spawn.c:119 +#, fuzzy +msgid "Waiting for child to exit.\n" +msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n" + +#: src/testbed/gnunet_testbed_mpi_spawn.c:242 +#, fuzzy, c-format +msgid "Spawning process `%s'\n" +msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n" + #: src/testbed/gnunet-testbed-profiler.c:290 msgid "tolerate COUNT number of continious timeout failures" msgstr "tolerar un número «COUNT» de continuas expiraciones de plazo" @@ -6895,16 +6935,6 @@ msgid "" "signal is received" msgstr "" -#: src/testbed/gnunet_testbed_mpi_spawn.c:119 -#, fuzzy -msgid "Waiting for child to exit.\n" -msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n" - -#: src/testbed/gnunet_testbed_mpi_spawn.c:242 -#, fuzzy, c-format -msgid "Spawning process `%s'\n" -msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n" - #: src/testbed/testbed_api.c:399 #, c-format msgid "Adding host %u failed with error: %s\n" @@ -7028,8 +7058,8 @@ msgid "Topology file needs more peers than given ones\n" msgstr "El fichero de topología necesita más pares que los dados\n" #: src/testbed/testbed_api_topology.c:1153 -#, c-format -msgid "Ignoring to connect peer %u to peer %u\n" +#, fuzzy, c-format +msgid "Ignoring to connect peer %lu to peer %lu\n" msgstr "Ignorando conexión del par %u al par %u\n" #: src/testing/gnunet-testing.c:185 @@ -7226,7 +7256,7 @@ msgid "GNUnet topology control" msgstr "" #: src/transport/gnunet-communicator-tcp.c:3221 -#: src/transport/gnunet-communicator-udp.c:2995 +#: src/transport/gnunet-communicator-udp.c:3076 #: src/transport/gnunet-service-tng.c:10014 #: src/transport/gnunet-service-transport.c:2626 #, fuzzy @@ -7240,7 +7270,7 @@ msgstr "" msgid "GNUnet TCP communicator" msgstr "Configurador Gtk de GNUnet" -#: src/transport/gnunet-communicator-udp.c:3067 +#: src/transport/gnunet-communicator-udp.c:3148 #, fuzzy msgid "GNUnet UDP communicator" msgstr "Configurador Gtk de GNUnet" @@ -7267,6 +7297,10 @@ msgstr "Se produjo un fallo al crear la página para «%s»\n" msgid "GNUnet UNIX domain socket communicator" msgstr "" +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + #: src/transport/gnunet-service-transport.c:445 msgid "# messages dropped due to slow client" msgstr "# mensajes omitidos debido a un cliente lento" @@ -7308,10 +7342,6 @@ msgstr "Añadiendo «%s» sin direcciones para el par «%s»\n" msgid "Adding blacklisting entry for peer `%s':`%s'\n" msgstr "" -#: src/transport/gnunet-service-transport_ats.c:137 -msgid "# Addresses given to ATS" -msgstr "" - #: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "# refrescos de mi «HELLO»" @@ -7653,45 +7683,6 @@ msgstr "# revalidaciones de direcciones iniciadas" msgid "# HELLOs given to peerinfo" msgstr "# «HELLO» obtenidos de «peerinfo»" -#: src/transport/gnunet-transport-profiler.c:220 -#, c-format -msgid "%llu B in %llu ms == %.2f KB/s!\n" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:577 -msgid "send data to peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:581 -#, fuzzy -msgid "receive data from peer" -msgstr "# respuestas recibidas de otros pares" - -#: src/transport/gnunet-transport-profiler.c:586 -#, fuzzy -msgid "iterations" -msgstr "Otras configuraciones" - -#: src/transport/gnunet-transport-profiler.c:591 -#, fuzzy -msgid "number of messages to send" -msgstr "número de mensajes a usar por iteración" - -#: src/transport/gnunet-transport-profiler.c:596 -#, fuzzy -msgid "message size to use" -msgstr "tamaño del mensaje" - -#: src/transport/gnunet-transport-profiler.c:601 -#: src/transport/gnunet-transport.c:1404 -msgid "peer identity" -msgstr "identidad del par" - -#: src/transport/gnunet-transport-profiler.c:614 -#: src/transport/gnunet-transport.c:1426 -msgid "Direct access to transport service." -msgstr "Acceso directo al servicio de transporte." - #: src/transport/gnunet-transport.c:406 #, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" @@ -7836,6 +7827,11 @@ msgstr "" msgid "do not resolve hostnames" msgstr "no resolver nombres de máquinas" +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 +msgid "peer identity" +msgstr "identidad del par" + #: src/transport/gnunet-transport.c:1408 #, fuzzy msgid "monitor plugin sessions" @@ -7845,7 +7841,41 @@ msgstr "# sesiones wlan pendientes" msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "enviar data para prueba a otro par (hasta CTRL-C)" -#: src/transport/plugin_transport_http_client.c:1489 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 +msgid "Direct access to transport service." +msgstr "Acceso directo al servicio de transporte." + +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:581 +#, fuzzy +msgid "receive data from peer" +msgstr "# respuestas recibidas de otros pares" + +#: src/transport/gnunet-transport-profiler.c:586 +#, fuzzy +msgid "iterations" +msgstr "Otras configuraciones" + +#: src/transport/gnunet-transport-profiler.c:591 +#, fuzzy +msgid "number of messages to send" +msgstr "número de mensajes a usar por iteración" + +#: src/transport/gnunet-transport-profiler.c:596 +#, fuzzy +msgid "message size to use" +msgstr "tamaño del mensaje" + +#: src/transport/plugin_transport_http_client.c:1488 #: src/transport/plugin_transport_http_server.c:2331 #: src/transport/plugin_transport_http_server.c:3562 #: src/transport/plugin_transport_tcp.c:3773 @@ -7853,35 +7883,35 @@ msgstr "enviar data para prueba a otro par (hasta CTRL-C)" msgid "TCP_STEALTH not supported on this platform.\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2141 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" msgstr "" "¡No se pudo inicializar el multi-manejador de curl, no se pudo iniciar el " "módulo %s!\n" -#: src/transport/plugin_transport_http_client.c:2190 +#: src/transport/plugin_transport_http_client.c:2189 #: src/transport/plugin_transport_http_server.c:3276 #, c-format msgid "Shutting down plugin `%s'\n" msgstr "Finalizando el módulo «%s»\n" -#: src/transport/plugin_transport_http_client.c:2207 +#: src/transport/plugin_transport_http_client.c:2206 #: src/transport/plugin_transport_http_server.c:3346 #, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "Finalización del módulo «%s» completa\n" -#: src/transport/plugin_transport_http_client.c:2241 +#: src/transport/plugin_transport_http_client.c:2240 #, fuzzy, c-format msgid "Maximum number of requests is %u\n" msgstr "El número máximo de conexiones es %u\n" #: src/transport/plugin_transport_http_server.c:1764 -#, c-format +#, fuzzy, c-format msgid "" "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " -"size %u\n" +"size %lu\n" msgstr "" "Acceso desde la conexión %p (%u de %u) para «%s» «%s» URL «%s» con tamaño de " "los datos de subida %u\n" @@ -7928,7 +7958,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "Encontradas %u direcciones para comunicar al servicio NAT\n" #: src/transport/plugin_transport_http_server.c:2935 -#: src/transport/plugin_transport_udp.c:3397 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" @@ -8129,7 +8159,24 @@ msgstr "Transporte TCP no escuchando en ningún puerto (únicamente cliente)\n" msgid "TCP transport advertises itself as being on port %llu\n" msgstr "El transporte TCP anuncia que está en el puerto %llu\n" -#: src/transport/plugin_transport_udp.c:3169 +#: src/transport/plugin_transport_udp_broadcasting.c:169 +#, fuzzy +msgid "# Multicast HELLO beacons received via UDP" +msgstr "# beacons HELLO multicast IPv6 recibidos vía UDP" + +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:571 +#, c-format +msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" +msgstr "" +"Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el " +"«socket» en el puerto %d\n" + +#: src/transport/plugin_transport_udp.c:3170 #, c-format msgid "" "UDP could not transmit message to `%s': Network seems down, please check " @@ -8138,7 +8185,7 @@ msgstr "" "UDP no pudo transmitir el mensaje a «%s»: La red parece caída, por favor, " "compruebe su configuración de red\n" -#: src/transport/plugin_transport_udp.c:3182 +#: src/transport/plugin_transport_udp.c:3183 #, fuzzy msgid "" "UDP could not transmit IPv6 message! Please check your network configuration " @@ -8148,58 +8195,41 @@ msgstr "" "configuración de red y deshabilite IPv6 si su conexión carece de una " "dirección IPv6 global\n" -#: src/transport/plugin_transport_udp.c:3465 -#: src/transport/plugin_transport_udp.c:3550 +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" -#: src/transport/plugin_transport_udp.c:3479 +#: src/transport/plugin_transport_udp.c:3480 #, fuzzy msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" -#: src/transport/plugin_transport_udp.c:3558 +#: src/transport/plugin_transport_udp.c:3559 msgid "Failed to open UDP sockets\n" msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" -#: src/transport/plugin_transport_udp.c:3628 -#: src/transport/plugin_transport_udp.c:3641 +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3666 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv4 address" msgstr "«%s» no es una dirección IP válida.\n" -#: src/transport/plugin_transport_udp.c:3688 +#: src/transport/plugin_transport_udp.c:3689 #, fuzzy msgid "must be valid IPv6 address" msgstr "«%s» no es una dirección IP válida.\n" -#: src/transport/plugin_transport_udp.c:3749 +#: src/transport/plugin_transport_udp.c:3750 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "Se produjo un fallo al crear una nueva firma" -#: src/transport/plugin_transport_udp_broadcasting.c:169 -#, fuzzy -msgid "# Multicast HELLO beacons received via UDP" -msgstr "# beacons HELLO multicast IPv6 recibidos vía UDP" - -#: src/transport/plugin_transport_udp_broadcasting.c:553 -msgid "" -"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:571 -#, c-format -msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "" -"Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el " -"«socket» en el puerto %d\n" - #: src/transport/plugin_transport_unix.c:1396 #, fuzzy, c-format msgid "Cannot bind to `%s'\n" @@ -8390,7 +8420,7 @@ msgid "do daemonize (detach from terminal)" msgstr "demonizar (desasociar del terminal)" #: src/transport/tcp_service_legacy.c:1397 -#: src/transport/transport-testing2.c:983 src/util/service.c:2072 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 #: src/util/service.c:2084 #, fuzzy, c-format msgid "Malformed configuration file `%s', exit ...\n" @@ -8448,8 +8478,8 @@ msgid "Error reading length of string `%s'" msgstr "Se produjo un error leyendo la cadena «%s»" #: src/util/bio.c:359 -#, c-format -msgid "String `%s' longer than allowed (%u > %u)" +#, fuzzy, c-format +msgid "String `%s' longer than allowed (%u > %lu)" msgstr "La cadena «%s» es mayor de lo permitido (%u > %u)" #: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 @@ -9205,67 +9235,67 @@ msgstr "" "Se produjo un fallo al expandir «$HOME»: variable de entorno «HOME» no " "establecida" -#: src/util/strings.c:1240 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "La dirección IPv6 no empezaba con «[»\n" -#: src/util/strings.c:1248 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "La dirección IPv6 contenía «:» para separar el número de puerto\n" -#: src/util/strings.c:1255 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "" "La dirección IPv6 contenía «]» antes de «:» para separar el número de " "puerto\n" -#: src/util/strings.c:1263 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "" "La dirección IPv6 contenía un número de puerto válido después del último " "«:»\n" -#: src/util/strings.c:1272 +#: src/util/strings.c:1273 #, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "Dirección IPv6 «%s» no válida: %s\n" -#: src/util/strings.c:1499 src/util/strings.c:1510 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "" -#: src/util/strings.c:1519 +#: src/util/strings.c:1520 #, fuzzy, c-format msgid "Malformed port policy `%s'\n" msgstr "Se produjo un fallo al iniciar el servicio «%s»\n" -#: src/util/strings.c:1602 src/util/strings.c:1631 src/util/strings.c:1678 -#: src/util/strings.c:1698 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "Formato no válido para la IP: «%s»\n" -#: src/util/strings.c:1656 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "Notación de red no válida («/%d» no es válido en IPv4 CIDR)." -#: src/util/strings.c:1707 +#: src/util/strings.c:1708 #, fuzzy, c-format msgid "Invalid format: `%s'\n" msgstr "Formato de tiempo no válido «%s»\n" -#: src/util/strings.c:1760 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "Notación de red no válida (no termina con «;»: «%s»)\n" -#: src/util/strings.c:1810 +#: src/util/strings.c:1811 #, c-format msgid "Wrong format `%s' for netmask\n" msgstr "Formato «%s» erroneo para máscara de red\n" -#: src/util/strings.c:1841 +#: src/util/strings.c:1842 #, c-format msgid "Wrong format `%s' for network\n" msgstr "Formato «%s» erroneo para red\n" @@ -9459,11 +9489,15 @@ msgstr "el servicio es ofrecido vía UDP" msgid "Setup tunnels via VPN." msgstr "Configurar túneles vía VPN." -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:420 -#: src/zonemaster/gnunet-service-zonemaster.c:849 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 msgid "Failed to connect to the namestore!\n" msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n" +#, c-format +#~ msgid "Unable to parse PKEY record `%s'\n" +#~ msgstr "No se pudo procesar el registro PKEY «%s»\n" + #~ msgid "b" #~ msgstr "b" diff --git a/po/fr.po b/po/fr.po index 82b35c5cd..2058b2d3d 100644 --- 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: 2020-10-13 16:12+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2015-12-24 01:20+0100\n" "Last-Translator: Stéphane Aulery \n" "Language-Team: French \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1303 +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 #, c-format msgid "Ego `%s' not known to identity service\n" msgstr "" @@ -27,8 +27,8 @@ msgid "Issuer public key `%s' is not well-formed\n" msgstr "" #: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 -#: src/namestore/gnunet-namestore-fcfsd.c:1154 #: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 #, c-format msgid "Failed to connect to namestore\n" msgstr "" @@ -491,14 +491,81 @@ msgstr "" msgid "Initiating shutdown as requested by client.\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:896 -msgid "Stop logging\n" -msgstr "Arrêter la journalisation\n" +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 +#, c-format +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" -#: src/ats-tests/ats-testing-log.c:952 +#: src/ats/gnunet-ats-solver-eval.c:3011 #, c-format -msgid "Start logging `%s'\n" -msgstr "Démarrer la journalisation « %s »\n" +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3063 +#, c-format +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997 +msgid "solver to use" +msgstr "solveur utilisé" + +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 +msgid "experiment to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3564 +msgid "print logging" +msgstr "afficher le journal" + +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:326 +#, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:336 +#, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:382 +#, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:474 +#, c-format +msgid "Failed to initialize solver `%s'!\n" +msgstr "" + +#: src/ats/plugin_ats_proportional.c:1142 +#, fuzzy, c-format +msgid "Invalid %s configuration %f \n" +msgstr "fornat invalide : « %s »\n" + +#: src/ats/plugin_ats_proportional.c:1165 +#, fuzzy, c-format +msgid "Invalid %s configuration %f\n" +msgstr "fornat invalide : « %s »\n" #: src/ats-tests/ats-testing.c:420 #, c-format @@ -510,6 +577,15 @@ msgstr "" msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "" +#: src/ats-tests/ats-testing-log.c:896 +msgid "Stop logging\n" +msgstr "Arrêter la journalisation\n" + +#: src/ats-tests/ats-testing-log.c:952 +#, c-format +msgid "Start logging `%s'\n" +msgstr "Démarrer la journalisation « %s »\n" + #: src/ats-tests/gnunet-ats-sim.c:92 #, c-format msgid "" @@ -517,16 +593,6 @@ msgid "" "= %u KiB/s\n" msgstr "" -#: src/ats-tests/gnunet-solver-eval.c:997 src/ats/gnunet-ats-solver-eval.c:3552 -msgid "solver to use" -msgstr "solveur utilisé" - -#: src/ats-tests/gnunet-solver-eval.c:1003 -#: src/ats-tests/gnunet-solver-eval.c:1008 -#: src/ats/gnunet-ats-solver-eval.c:3557 -msgid "experiment to use" -msgstr "" - #: src/ats-tool/gnunet-ats.c:299 #, c-format msgid "%u address resolutions had a timeout\n" @@ -642,72 +708,6 @@ msgstr "" msgid "Print information about ATS state" msgstr "" -#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 -#, c-format -msgid "" -"Could not load quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3011 -#, c-format -msgid "" -"No outbound quota configured for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3063 -#, c-format -msgid "" -"No outbound quota configure for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3564 -msgid "print logging" -msgstr "afficher le journal" - -#: src/ats/gnunet-ats-solver-eval.c:3569 -msgid "save logging to disk" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3574 -msgid "disable normalization" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:326 -#, c-format -msgid "" -"Could not load %s quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:336 -#, c-format -msgid "%s quota configured for network `%s' is %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:382 -#, c-format -msgid "" -"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:474 -#, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "" - -#: src/ats/plugin_ats_proportional.c:1142 -#, fuzzy, c-format -msgid "Invalid %s configuration %f \n" -msgstr "fornat invalide : « %s »\n" - -#: src/ats/plugin_ats_proportional.c:1165 -#, fuzzy, c-format -msgid "Invalid %s configuration %f\n" -msgstr "fornat invalide : « %s »\n" - #: src/auction/gnunet-auction-create.c:163 msgid "description of the item to be sold" msgstr "" @@ -745,7 +745,7 @@ msgstr "" #: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 #: src/conversation/gnunet-conversation-test.c:256 -#: src/revocation/gnunet-revocation.c:552 src/template/gnunet-template.c:75 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 msgid "help text" msgstr "" @@ -838,28 +838,6 @@ msgstr "" msgid "Connection to conversation service lost, trying to reconnect\n" msgstr "" -#: src/conversation/gnunet-conversation-test.c:120 -#, c-format -msgid "" -"\n" -"End of transmission. Have a GNU day.\n" -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:146 -#, c-format -msgid "" -"\n" -"We are now playing your recording back. If you can hear it, your audio " -"settings are working..." -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:218 -#, c-format -msgid "" -"We will now be recording you for %s. After that time, the recording will be " -"played back to you..." -msgstr "" - #: src/conversation/gnunet-conversation.c:264 #, c-format msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" @@ -1116,8 +1094,30 @@ msgstr "" msgid "Enables having a conversation with other GNUnet users." msgstr "" -#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#: src/conversation/gnunet-conversation-test.c:120 +#, c-format +msgid "" +"\n" +"End of transmission. Have a GNU day.\n" +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:146 +#, c-format +msgid "" +"\n" +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:218 +#, c-format +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" + #: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 #, c-format msgid "Read error from STDIN: %d %s\n" msgstr "" @@ -1241,7 +1241,7 @@ msgstr "ogg_stream_init() échoué.\n" msgid "Failed to allocate %u bytes for second packet\n" msgstr "" -#: src/conversation/gnunet-service-conversation.c:1287 +#: src/conversation/gnunet-service-conversation.c:1286 #, c-format msgid "Could not open line, port %s already in use!\n" msgstr "" @@ -1925,7 +1925,7 @@ msgid "" msgstr "" #: src/datastore/plugin_datastore_sqlite.c:1316 -#: src/namecache/plugin_namecache_sqlite.c:570 +#: src/namecache/plugin_namecache_sqlite.c:564 #: src/namestore/plugin_namestore_sqlite.c:765 msgid "Sqlite database running\n" msgstr "" @@ -2000,6 +2000,53 @@ msgstr "" msgid "Prints all packets that go through the DHT." msgstr "" +#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 +#, c-format +msgid "Exiting as the number of peers is %u\n" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +#, fuzzy +msgid "number of peers to start" +msgstr "nombre de valeurs" + +#: src/dht/gnunet_dht_profiler.c:961 +msgid "number of PUTs to perform per peer" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1023 +msgid "Measure quality and performance of the DHT service." +msgstr "" + #: src/dht/gnunet-dht-put.c:133 msgid "Must provide KEY and DATA for DHT put!\n" msgstr "" @@ -2245,60 +2292,14 @@ msgstr "" msgid "# DHT requests combined" msgstr "" -#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 -#, c-format -msgid "Exiting as the number of peers is %u\n" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 -#, fuzzy -msgid "number of peers to start" -msgstr "nombre de valeurs" - -#: src/dht/gnunet_dht_profiler.c:961 -msgid "number of PUTs to perform per peer" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 -#: src/testbed/gnunet-testbed-profiler.c:305 -msgid "name of the file with the login information for the testbed" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:973 -msgid "delay between rounds for collecting statistics (default: 30 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:979 -msgid "delay to start doing PUTs (default: 1 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:985 -msgid "delay to start doing GETs (default: 5 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:990 -msgid "replication degree for DHT PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:996 -msgid "chance that a peer is selected at random for PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1002 -msgid "timeout for DHT PUT and GET requests (default: 1 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1023 -msgid "Measure quality and performance of the DHT service." -msgstr "" - #: src/dht/plugin_block_dht.c:189 #, c-format msgid "Block not of type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:198 -msgid "Size mismatch for block\n" +#, c-format +msgid "Size mismatch for block with type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:209 @@ -2722,8 +2723,8 @@ msgstr "" #: src/fs/fs_download.c:1053 #, c-format msgid "" -"Internal error or bogus download URI (expected %u bytes at depth %u and " -"offset %llu/%llu, got %u bytes)" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" msgstr "" #: src/fs/fs_download.c:1075 @@ -3041,7 +3042,7 @@ msgid "" "You must specify one and only one directory name for automatic publication.\n" msgstr "" -#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:888 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "" @@ -3049,15 +3050,15 @@ msgstr "" msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:893 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "" -#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:938 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "" -#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:951 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "" @@ -3138,7 +3139,7 @@ msgstr "" msgid "You need to specify a URI argument.\n" msgstr "" -#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:707 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, c-format msgid "Failed to parse URI: %s\n" msgstr "" @@ -3151,7 +3152,7 @@ msgstr "" msgid "Target filename must be specified.\n" msgstr "" -#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:861 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 #: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, c-format msgid "Could not initialize `%s' subsystem.\n" @@ -3191,6 +3192,14 @@ msgid "" "chk/...)" msgstr "" +#: src/fs/gnunet-fs.c:128 +msgid "print a list of all indexed files" +msgstr "" + +#: src/fs/gnunet-fs.c:141 +msgid "Special file-sharing operations" +msgstr "" + #: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "" @@ -3207,14 +3216,6 @@ msgstr "" msgid "run a testbed to measure file-sharing performance" msgstr "" -#: src/fs/gnunet-fs.c:128 -msgid "print a list of all indexed files" -msgstr "" - -#: src/fs/gnunet-fs.c:141 -msgid "Special file-sharing operations" -msgstr "" - #: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" @@ -3262,142 +3263,142 @@ msgstr "" msgid "Keywords for file `%s' (%s)\n" msgstr "" -#: src/fs/gnunet-publish.c:577 +#: src/fs/gnunet-publish.c:582 msgid "Could not publish\n" msgstr "" -#: src/fs/gnunet-publish.c:603 +#: src/fs/gnunet-publish.c:611 msgid "Could not start publishing.\n" msgstr "" -#: src/fs/gnunet-publish.c:636 +#: src/fs/gnunet-publish.c:644 #, c-format msgid "Scanning directory `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:638 +#: src/fs/gnunet-publish.c:646 #, c-format msgid "Scanning file `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:644 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "" -#: src/fs/gnunet-publish.c:650 +#: src/fs/gnunet-publish.c:658 msgid "Preprocessing complete.\n" msgstr "" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:664 #, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "" -#: src/fs/gnunet-publish.c:662 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "" -#: src/fs/gnunet-publish.c:670 +#: src/fs/gnunet-publish.c:678 msgid "Error scanning directory.\n" msgstr "" -#: src/fs/gnunet-publish.c:697 +#: src/fs/gnunet-publish.c:705 #, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "" -#: src/fs/gnunet-publish.c:729 +#: src/fs/gnunet-publish.c:737 #, c-format msgid "Failed to access `%s': %s\n" msgstr "" -#: src/fs/gnunet-publish.c:746 +#: src/fs/gnunet-publish.c:754 msgid "" "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " "installed?\n" msgstr "" -#: src/fs/gnunet-publish.c:802 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "" -#: src/fs/gnunet-publish.c:809 +#: src/fs/gnunet-publish.c:817 #, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "" -#: src/fs/gnunet-publish.c:815 +#: src/fs/gnunet-publish.c:823 #, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "" -#: src/fs/gnunet-publish.c:824 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:836 src/fs/gnunet-publish.c:845 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 #: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:898 +#: src/fs/gnunet-publish.c:906 msgid "enable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-publish.c:904 +#: src/fs/gnunet-publish.c:912 msgid "" "print list of extracted keywords that would be used, but do not perform " "upload" msgstr "" -#: src/fs/gnunet-publish.c:912 +#: src/fs/gnunet-publish.c:920 msgid "" "add an additional keyword for the top-level file or directory (this option " "can be specified multiple times)" msgstr "" -#: src/fs/gnunet-publish.c:919 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "" -#: src/fs/gnunet-publish.c:924 +#: src/fs/gnunet-publish.c:932 msgid "" "do not index, perform full insertion (stores entire file in encrypted form " "in GNUnet database)" msgstr "" -#: src/fs/gnunet-publish.c:931 +#: src/fs/gnunet-publish.c:939 msgid "" "specify ID of an updated version to be published in the future (for " "namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:944 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" msgstr "" -#: src/fs/gnunet-publish.c:956 +#: src/fs/gnunet-publish.c:964 msgid "" "only simulate the process but do not do any actual publishing (useful to " "compute URIs)" msgstr "" -#: src/fs/gnunet-publish.c:963 +#: src/fs/gnunet-publish.c:971 msgid "" "set the ID of this version of the publication (for namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:971 +#: src/fs/gnunet-publish.c:979 msgid "" "URI to be published (can be used instead of passing a file to add keywords " "to the file with the respective URI)" msgstr "" -#: src/fs/gnunet-publish.c:989 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "" @@ -3781,7 +3782,7 @@ msgstr "" msgid "Unindex a file that was previously indexed with gnunet-publish." msgstr "" -#: src/gns/gns_tld_api.c:292 +#: src/gns/gns_tld_api.c:293 msgid "Expected a base32-encoded public zone key\n" msgstr "" @@ -3860,7 +3861,50 @@ msgstr "" msgid "look for GNS2DNS records instead of ANY" msgstr "" -#: src/gns/gnunet-gns-import.c:486 +#: src/gns/gnunet-gns.c:257 +#, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "" + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 +#, c-format +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" + +#: src/gns/gnunet-gns.c:305 +#, c-format +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" + +#: src/gns/gnunet-gns.c:340 +msgid "Lookup a record for the given name" +msgstr "" + +#: src/gns/gnunet-gns.c:346 +msgid "Specify the type of the record to lookup" +msgstr "" + +#: src/gns/gnunet-gns.c:352 +msgid "Specify a timeout for the lookup" +msgstr "" + +#: src/gns/gnunet-gns.c:356 +msgid "No unneeded output" +msgstr "" + +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" + +#: src/gns/gnunet-gns.c:375 +msgid "GNUnet GNS resolver tool" +msgstr "" + +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "" @@ -3979,49 +4023,6 @@ msgstr "" msgid "GNUnet GNS proxy" msgstr "" -#: src/gns/gnunet-gns.c:257 -#, c-format -msgid "`%s' is not a valid DNS domain name\n" -msgstr "" - -#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 -#, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "" - -#: src/gns/gnunet-gns.c:281 -msgid "Cannot resolve using GNS: GNUnet peer not running\n" -msgstr "" - -#: src/gns/gnunet-gns.c:305 -#, c-format -msgid "Invalid typename specified, assuming `ANY'\n" -msgstr "" - -#: src/gns/gnunet-gns.c:340 -msgid "Lookup a record for the given name" -msgstr "" - -#: src/gns/gnunet-gns.c:346 -msgid "Specify the type of the record to lookup" -msgstr "" - -#: src/gns/gnunet-gns.c:352 -msgid "Specify a timeout for the lookup" -msgstr "" - -#: src/gns/gnunet-gns.c:356 -msgid "No unneeded output" -msgstr "" - -#: src/gns/gnunet-gns.c:361 -msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" -msgstr "" - -#: src/gns/gnunet-gns.c:375 -msgid "GNUnet GNS resolver tool" -msgstr "" - #: src/gns/gnunet-service-gns.c:505 msgid "Properly base32-encoded public key required" msgstr "" @@ -4031,8 +4032,8 @@ msgid "Failed to connect to the namecache!\n" msgstr "" #: src/gns/gnunet-service-gns.c:560 -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:444 -#: src/zonemaster/gnunet-service-zonemaster.c:887 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 msgid "Could not connect to DHT!\n" msgstr "" @@ -4073,66 +4074,70 @@ msgstr "" msgid "VPN returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1909 +#: src/gns/gnunet-service-gns_resolver.c:1910 #, c-format msgid "Name `%s' cannot be converted to IDNA." msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1922 +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1965 +#: src/gns/gnunet-service-gns_resolver.c:1966 #, c-format msgid "GNS lookup failed (zero records found for `%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2385 +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2408 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2576 +#: src/gns/gnunet-service-gns_resolver.c:2581 #, c-format msgid "GNS namecache returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2716 +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:167 -#, c-format -msgid "Unable to parse PKEY record `%s'\n" +#: src/gns/plugin_gnsrecord_gns.c:174 +#, fuzzy, c-format +msgid "Unable to parse zone key record `%s'\n" +msgstr "Résolution de « %s » échouée\n" + +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:197 +#: src/gns/plugin_gnsrecord_gns.c:213 #, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:213 +#: src/gns/plugin_gnsrecord_gns.c:229 #, c-format msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:237 +#: src/gns/plugin_gnsrecord_gns.c:253 #, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:269 +#: src/gns/plugin_gnsrecord_gns.c:285 #, c-format msgid "Unable to parse BOX record string `%s'\n" msgstr "" -#: src/gns/plugin_rest_gns.c:447 +#: src/gns/plugin_rest_gns.c:448 msgid "Gns REST API initialized\n" msgstr "" @@ -4435,7 +4440,7 @@ msgid "# hostlist URIs written to file" msgstr "" #: src/hostlist/gnunet-daemon-hostlist_client.c:1657 -#: src/transport/plugin_transport_http_client.c:2301 +#: src/transport/plugin_transport_http_client.c:2300 #, c-format msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" msgstr "" @@ -4560,58 +4565,62 @@ msgstr "" msgid "Could not start hostlist HTTP server on port %u\n" msgstr "" -#: src/identity/gnunet-identity.c:209 +#: src/identity/gnunet-identity.c:214 #, c-format msgid "Failed to create ego: %s\n" msgstr "" -#: src/identity/gnunet-identity.c:250 +#: src/identity/gnunet-identity.c:255 #, c-format msgid "Failed to set default ego: %s\n" msgstr "" -#: src/identity/gnunet-identity.c:446 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "" -#: src/identity/gnunet-identity.c:451 +#: src/identity/gnunet-identity.c:467 msgid "delete ego NAME " msgstr "" -#: src/identity/gnunet-identity.c:457 +#: src/identity/gnunet-identity.c:473 msgid "" "set the private key for the identity to PRIVATE_KEY (use together with -C)" msgstr "" -#: src/identity/gnunet-identity.c:461 +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + +#: src/identity/gnunet-identity.c:482 msgid "display all egos" msgstr "" -#: src/identity/gnunet-identity.c:465 +#: src/identity/gnunet-identity.c:486 #, fuzzy msgid "reduce output" msgstr "sortie verbeuse" -#: src/identity/gnunet-identity.c:472 +#: src/identity/gnunet-identity.c:493 msgid "" "set default identity to NAME for a subsystem SUBSYSTEM (use together with -" "s) or restrict results to NAME (use together with -d)" msgstr "" -#: src/identity/gnunet-identity.c:476 +#: src/identity/gnunet-identity.c:497 msgid "run in monitor mode egos" msgstr "" -#: src/identity/gnunet-identity.c:480 +#: src/identity/gnunet-identity.c:501 msgid "display private keys as well" msgstr "" -#: src/identity/gnunet-identity.c:487 +#: src/identity/gnunet-identity.c:508 msgid "" "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" msgstr "" -#: src/identity/gnunet-identity.c:502 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "" @@ -4647,26 +4656,26 @@ msgstr "" msgid "no matching ego found" msgstr "" -#: src/identity/gnunet-service-identity.c:1072 +#: src/identity/gnunet-service-identity.c:1133 #, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "" -#: src/identity/gnunet-service-identity.c:1130 +#: src/identity/gnunet-service-identity.c:1191 #, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" msgstr "" -#: src/identity/gnunet-service-identity.c:1139 +#: src/identity/gnunet-service-identity.c:1200 #, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "" -#: src/identity/plugin_rest_identity.c:1384 +#: src/identity/plugin_rest_identity.c:1385 msgid "Identity REST API initialized\n" msgstr "" -#: src/json/json.c:133 +#: src/json/json.c:139 #, fuzzy, c-format msgid "Failed to parse JSON in option `%s': %s (%s)\n" msgstr "Résolution de « %s » échouée : %s\n" @@ -4711,7 +4720,7 @@ msgstr "fornat invalide : « %s »\n" msgid "You must specify a name\n" msgstr "" -#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1640 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "" @@ -4719,20 +4728,20 @@ msgstr "" msgid "specifies the public key of the zone to look in" msgstr "" -#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1701 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 msgid "GNUnet zone manipulation tool" msgstr "" -#: src/namecache/namecache_api.c:293 +#: src/namecache/namecache_api.c:285 msgid "Namecache failed to cache block" msgstr "" -#: src/namecache/namecache_api.c:381 +#: src/namecache/namecache_api.c:373 msgid "Error communicating with namecache service" msgstr "" #: src/namecache/plugin_namecache_flat.c:118 -#: src/namecache/plugin_namecache_flat.c:256 +#: src/namecache/plugin_namecache_flat.c:253 #: src/namestore/plugin_namestore_flat.c:176 #: src/namestore/plugin_namestore_flat.c:424 #: src/peerstore/plugin_peerstore_flat.c:380 @@ -4754,7 +4763,7 @@ msgstr "" msgid "Unable to read file: %s.\n" msgstr "Résolution de « %s » échouée\n" -#: src/namecache/plugin_namecache_flat.c:410 +#: src/namecache/plugin_namecache_flat.c:404 msgid "flat plugin running\n" msgstr "" @@ -4766,68 +4775,6 @@ msgstr "" msgid "Failed to setup database at `%s'\n" msgstr "Échec du démarrage de %s\n" -#: src/namestore/gnunet-namestore-fcfsd.c:552 -#, c-format -msgid "Unsupported form value `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:579 -#, c-format -msgid "Failed to create record for domain `%s': %s\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:600 -msgid "Error when mapping zone to name\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:632 -#, c-format -msgid "Found existing name `%s' for the given key\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:694 -#, c-format -msgid "Found %u existing records for domain `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:784 -#, c-format -msgid "Failed to create page for `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:803 -#, c-format -msgid "Failed to setup post processor for `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:840 -msgid "Domain name must not contain `.'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:849 -msgid "Domain name must not contain `+'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1084 -msgid "No ego configured for `fcfsd` subsystem\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1115 -msgid "Failed to start HTTP server\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1163 -msgid "Failed to connect to identity\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1190 -msgid "name of the zone that is to be managed by FCFSD" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1210 -msgid "GNU Name System First Come First Serve name registration service" -msgstr "" - #: src/namestore/gnunet-namestore.c:334 #, c-format msgid "Adding record failed: %s\n" @@ -4843,11 +4790,17 @@ msgstr "" msgid "Deleting record failed%s%s\n" msgstr "" -#: src/namestore/gnunet-namestore.c:656 src/namestore/gnunet-namestore.c:667 +#: src/namestore/gnunet-namestore.c:656 #, c-format msgid "A %s record exists already under `%s', no other records can be added.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:680 #, c-format msgid "" @@ -4855,11 +4808,16 @@ msgid "" "zone.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:696 src/namestore/gnunet-namestore.c:710 +#: src/namestore/gnunet-namestore.c:696 #, c-format msgid "Records already exist under `%s', cannot add `%s' record.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:726 #, c-format msgid "" @@ -4890,7 +4848,7 @@ msgstr "" #: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 #: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 #: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 -#: src/namestore/gnunet-namestore.c:1229 +#: src/namestore/gnunet-namestore.c:1228 #, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "" @@ -4906,7 +4864,7 @@ msgstr "" #: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 #: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 -#: src/namestore/gnunet-namestore.c:1231 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "ajouter" @@ -4925,7 +4883,7 @@ msgstr "" msgid "Value `%s' invalid for record type `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1238 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, c-format msgid "Invalid time format `%s'\n" msgstr "" @@ -4934,23 +4892,23 @@ msgstr "" msgid "del" msgstr "supprimer" -#: src/namestore/gnunet-namestore.c:1198 +#: src/namestore/gnunet-namestore.c:1197 #, c-format msgid "Invalid public key for reverse lookup `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1221 +#: src/namestore/gnunet-namestore.c:1220 #: src/peerinfo-tool/gnunet-peerinfo.c:736 #, c-format msgid "Invalid URI `%s'\n" msgstr "URI invalide « %s »\n" -#: src/namestore/gnunet-namestore.c:1291 +#: src/namestore/gnunet-namestore.c:1290 #, c-format msgid "Label `%s' contains `.' which is not allowed\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1341 +#: src/namestore/gnunet-namestore.c:1340 #, c-format msgid "" "No default identity configured for `namestore' subsystem\n" @@ -4958,102 +4916,169 @@ msgid "" "Run gnunet-identity -d to get a list of choices for $NAME\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1406 +#: src/namestore/gnunet-namestore.c:1405 #, c-format msgid "Superfluous command line arguments (starting with `%s') ignored\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1435 +#: src/namestore/gnunet-namestore.c:1434 #, c-format msgid "Cannot connect to identity service\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1482 +#: src/namestore/gnunet-namestore.c:1481 msgid "Empty record line argument is not allowed.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1494 +#: src/namestore/gnunet-namestore.c:1493 #, c-format msgid "Invalid expiration time `%s' (must be without unit)\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1506 src/namestore/gnunet-namestore.c:1522 -#: src/namestore/gnunet-namestore.c:1539 +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 #, c-format msgid "Missing entries in record line `%s'.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1514 +#: src/namestore/gnunet-namestore.c:1513 #, fuzzy, c-format msgid "Unknown record type `%s'\n" msgstr "Commande « %s » inconnue\n" -#: src/namestore/gnunet-namestore.c:1552 +#: src/namestore/gnunet-namestore.c:1551 #, fuzzy, c-format msgid "Invalid record data for type %s: `%s'.\n" msgstr "fornat invalide : « %s »\n" -#: src/namestore/gnunet-namestore.c:1609 +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "ajouter un enregistrement" -#: src/namestore/gnunet-namestore.c:1612 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "suprimer un enregistrement" -#: src/namestore/gnunet-namestore.c:1616 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "afficher les enregistrements" -#: src/namestore/gnunet-namestore.c:1623 +#: src/namestore/gnunet-namestore.c:1622 msgid "" "expiration time for record to use (for adding only), \"never\" is possible" msgstr "" -#: src/namestore/gnunet-namestore.c:1629 +#: src/namestore/gnunet-namestore.c:1628 msgid "set the desired nick name for the zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1634 +#: src/namestore/gnunet-namestore.c:1633 msgid "monitor changes in the namestore" msgstr "" -#: src/namestore/gnunet-namestore.c:1646 +#: src/namestore/gnunet-namestore.c:1645 msgid "determine our name for the given PKEY" msgstr "" -#: src/namestore/gnunet-namestore.c:1653 +#: src/namestore/gnunet-namestore.c:1652 msgid "" "set record set to values given by (possibly multiple) RECORDLINES; can be " "specified multiple times" msgstr "" -#: src/namestore/gnunet-namestore.c:1659 +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "" -#: src/namestore/gnunet-namestore.c:1664 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1670 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "" -#: src/namestore/gnunet-namestore.c:1674 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "" -#: src/namestore/gnunet-namestore.c:1680 +#: src/namestore/gnunet-namestore.c:1679 msgid "" "create shadow record (only valid if all other records of the same type have " "expired" msgstr "" -#: src/namestore/gnunet-namestore.c:1686 +#: src/namestore/gnunet-namestore.c:1685 msgid "name of the ego controlling the zone" msgstr "" +#: src/namestore/gnunet-namestore-fcfsd.c:552 +#, c-format +msgid "Unsupported form value `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:579 +#, c-format +msgid "Failed to create record for domain `%s': %s\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 +#, c-format +msgid "Found existing name `%s' for the given key\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "Erreur de création du tunnel\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:707 +#, c-format +msgid "Found %u existing records for domain `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:796 +#, c-format +msgid "Failed to create page for `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:815 +#, c-format +msgid "Failed to setup post processor for `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:850 +msgid "Domain name must not contain `.'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:859 +msgid "Domain name must not contain `+'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1094 +msgid "No ego configured for `fcfsd` subsystem\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1125 +msgid "Failed to start HTTP server\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1173 +msgid "Failed to connect to identity\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 +msgid "GNU Name System First Come First Serve name registration service" +msgstr "" + #: src/namestore/gnunet-service-namestore.c:866 #, c-format msgid "Failed to replicate block in namecache: %s\n" @@ -5081,7 +5106,7 @@ msgstr "" msgid "Namestore database file `%s' malformed\n" msgstr "" -#: src/namestore/plugin_namestore_flat.c:789 +#: src/namestore/plugin_namestore_flat.c:792 msgid "Flat file database running\n" msgstr "" @@ -5360,37 +5385,91 @@ msgstr "" msgid "`upnpc' command not found\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:857 -msgid "limit to the number of connections to NSE services, 0 for none" +#: src/nse/gnunet-nse.c:124 +msgid "Show network size estimates from NSE service." +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:857 +msgid "limit to the number of connections to NSE services, 0 for none" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:864 +msgid "name of the file for writing connection information and statistics" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:879 +msgid "name of the file for writing the main results" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:888 +msgid "Number of peers to run in each round, separated by commas" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:900 +msgid "delay between rounds" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:912 +msgid "Measure quality and performance of the NSE service." +msgstr "" + +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 +msgid "Value is too large.\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:175 +#, c-format +msgid "Removing expired address of transport `%s'\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:306 +#, c-format +msgid "Failed to parse HELLO in file `%s': %s\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 +#, c-format +msgid "Failed to parse HELLO in file `%s'\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:426 +msgid "# peers known" msgstr "" -#: src/nse/gnunet-nse-profiler.c:864 -msgid "name of the file for writing connection information and statistics" +#: src/peerinfo/gnunet-service-peerinfo.c:468 +#, c-format +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:879 -msgid "name of the file for writing the main results" +#: src/peerinfo/gnunet-service-peerinfo.c:624 +#, c-format +msgid "Scanning directory `%s'\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:888 -msgid "Number of peers to run in each round, separated by commas" +#: src/peerinfo/gnunet-service-peerinfo.c:631 +#, c-format +msgid "Still no peers found in `%s'!\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:900 -msgid "delay between rounds" +#: src/peerinfo/gnunet-service-peerinfo.c:1024 +#, c-format +msgid "Cleaning up directory `%s'\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:912 -msgid "Measure quality and performance of the NSE service." +#: src/peerinfo/gnunet-service-peerinfo.c:1319 +#, c-format +msgid "Importing HELLOs from `%s'\n" msgstr "" -#: src/nse/gnunet-nse.c:124 -msgid "Show network size estimates from NSE service." +#: src/peerinfo/gnunet-service-peerinfo.c:1332 +msgid "Skipping import of included HELLOs\n" msgstr "" -#: src/nse/gnunet-service-nse.c:1443 -#: src/revocation/gnunet-service-revocation.c:834 src/util/gnunet-scrypt.c:257 -msgid "Value is too large.\n" +#: src/peerinfo/peerinfo_api.c:217 +msgid "Failed to receive response from `PEERINFO' service." msgstr "" #: src/peerinfo-tool/gnunet-peerinfo.c:237 @@ -5487,60 +5566,6 @@ msgstr "" msgid "Peerinfo REST API initialized\n" msgstr "" -#: src/peerinfo/gnunet-service-peerinfo.c:175 -#, c-format -msgid "Removing expired address of transport `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:306 -#, c-format -msgid "Failed to parse HELLO in file `%s': %s\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:323 -#: src/peerinfo/gnunet-service-peerinfo.c:348 -#, c-format -msgid "Failed to parse HELLO in file `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:426 -msgid "# peers known" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:468 -#, c-format -msgid "" -"File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:624 -#, c-format -msgid "Scanning directory `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:631 -#, c-format -msgid "Still no peers found in `%s'!\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1024 -#, c-format -msgid "Cleaning up directory `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1319 -#, c-format -msgid "Importing HELLOs from `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1332 -msgid "Skipping import of included HELLOs\n" -msgstr "" - -#: src/peerinfo/peerinfo_api.c:217 -msgid "Failed to receive response from `PEERINFO' service." -msgstr "" - #: src/peerstore/gnunet-peerstore.c:92 msgid "peerstore" msgstr "" @@ -5724,7 +5749,7 @@ msgstr "" msgid "re:claimID command line tool" msgstr "" -#: src/reclaim/plugin_rest_openid_connect.c:2618 +#: src/reclaim/plugin_rest_openid_connect.c:2613 msgid "OpenID Connect REST API initialized\n" msgstr "" @@ -5874,112 +5899,129 @@ msgstr "" msgid "Internal error, key revocation might have failed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:251 +#: src/revocation/gnunet-revocation.c:252 msgid "Cancelling calculation.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:296 +#: src/revocation/gnunet-revocation.c:299 #, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:335 +#: src/revocation/gnunet-revocation.c:339 #, c-format msgid "Ego `%s' not found.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:349 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:359 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "" -#: src/revocation/gnunet-revocation.c:371 +#: src/revocation/gnunet-revocation.c:378 msgid "Continuing calculation where left off...\n" msgstr "" -#: src/revocation/gnunet-revocation.c:378 +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "" -#: src/revocation/gnunet-revocation.c:416 +#: src/revocation/gnunet-revocation.c:423 #, c-format msgid "Public key `%s' malformed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:426 +#: src/revocation/gnunet-revocation.c:433 msgid "" "Testing and revoking at the same time is not allowed, only executing test.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:456 +#: src/revocation/gnunet-revocation.c:463 msgid "No filename to store revocation certificate given.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:471 +#: src/revocation/gnunet-revocation.c:480 #, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:493 +#: src/revocation/gnunet-revocation.c:488 +#, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "" + +#: src/revocation/gnunet-revocation.c:510 msgid "No action specified. Nothing to do.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:512 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "" -#: src/revocation/gnunet-revocation.c:520 +#: src/revocation/gnunet-revocation.c:537 msgid "" "revoke the private key associated for the the private key associated with " "the ego NAME " msgstr "" -#: src/revocation/gnunet-revocation.c:527 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "" -#: src/revocation/gnunet-revocation.c:534 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "" -#: src/revocation/gnunet-revocation.c:540 +#: src/revocation/gnunet-revocation.c:557 #, fuzzy msgid "number of epochs to calculate for" msgstr "nombre de valeurs" -#: src/revocation/gnunet-service-revocation.c:454 +#: src/revocation/gnunet-service-revocation.c:494 msgid "# unsupported revocations received via set union" msgstr "" -#: src/revocation/gnunet-service-revocation.c:464 +#: src/revocation/gnunet-service-revocation.c:504 msgid "# revocation messages received via set union" msgstr "" -#: src/revocation/gnunet-service-revocation.c:469 +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:473 +#: src/revocation/gnunet-service-revocation.c:513 msgid "# revocation set unions failed" msgstr "" -#: src/revocation/gnunet-service-revocation.c:481 +#: src/revocation/gnunet-service-revocation.c:521 msgid "# revocation set unions completed" msgstr "" -#: src/revocation/gnunet-service-revocation.c:519 +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:871 +#: src/revocation/gnunet-service-revocation.c:912 msgid "Could not open revocation database file!" msgstr "" +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" + +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" + +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" + #: src/rps/gnunet-rps-profiler.c:3200 msgid "duration of the profiling" msgstr "" @@ -5997,18 +6039,6 @@ msgstr "nombre de valeurs" msgid "Measure quality and performance of the RPS service." msgstr "" -#: src/rps/gnunet-rps.c:270 -msgid "Seed a PeerID" -msgstr "" - -#: src/rps/gnunet-rps.c:275 -msgid "Get updates of view (0 for infinite updates)" -msgstr "" - -#: src/rps/gnunet-rps.c:279 -msgid "Get peers from biased stream" -msgstr "" - #: src/scalarproduct/gnunet-scalarproduct.c:229 msgid "You must specify at least one message ID to check!\n" msgstr "" @@ -6063,10 +6093,10 @@ msgstr "" msgid "Calculate the Vectorproduct with a GNUnet peer." msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 msgid "Connect to CADET failed\n" msgstr "" @@ -6091,7 +6121,7 @@ msgid "also profile decryption" msgstr "" #: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 -#: src/setu/gnunet-service-setu.c:3635 +#: src/setu/gnunet-service-setu.c:3633 #, fuzzy msgid "Could not connect to CADET service\n" msgstr "Impossible d’ouvrir « %s ».\n" @@ -6415,6 +6445,15 @@ msgstr "" msgid "%.s Unknown result code." msgstr "%.s Code d'erreur inconnu" +#: src/testbed/gnunet_testbed_mpi_spawn.c:119 +msgid "Waiting for child to exit.\n" +msgstr "" + +#: src/testbed/gnunet_testbed_mpi_spawn.c:242 +#, c-format +msgid "Spawning process `%s'\n" +msgstr "" + #: src/testbed/gnunet-testbed-profiler.c:290 msgid "tolerate COUNT number of continious timeout failures" msgstr "" @@ -6426,15 +6465,6 @@ msgid "" "signal is received" msgstr "" -#: src/testbed/gnunet_testbed_mpi_spawn.c:119 -msgid "Waiting for child to exit.\n" -msgstr "" - -#: src/testbed/gnunet_testbed_mpi_spawn.c:242 -#, c-format -msgid "Spawning process `%s'\n" -msgstr "" - #: src/testbed/testbed_api.c:399 #, c-format msgid "Adding host %u failed with error: %s\n" @@ -6555,7 +6585,7 @@ msgstr "" #: src/testbed/testbed_api_topology.c:1153 #, c-format -msgid "Ignoring to connect peer %u to peer %u\n" +msgid "Ignoring to connect peer %lu to peer %lu\n" msgstr "" #: src/testing/gnunet-testing.c:185 @@ -6723,7 +6753,7 @@ msgid "GNUnet topology control" msgstr "" #: src/transport/gnunet-communicator-tcp.c:3221 -#: src/transport/gnunet-communicator-udp.c:2995 +#: src/transport/gnunet-communicator-udp.c:3076 #: src/transport/gnunet-service-tng.c:10014 #: src/transport/gnunet-service-transport.c:2626 msgid "Transport service is lacking key configuration settings. Exiting.\n" @@ -6733,7 +6763,7 @@ msgstr "" msgid "GNUnet TCP communicator" msgstr "" -#: src/transport/gnunet-communicator-udp.c:3067 +#: src/transport/gnunet-communicator-udp.c:3148 msgid "GNUnet UDP communicator" msgstr "" @@ -6756,6 +6786,10 @@ msgstr "" msgid "GNUnet UNIX domain socket communicator" msgstr "" +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + #: src/transport/gnunet-service-transport.c:445 msgid "# messages dropped due to slow client" msgstr "" @@ -6796,10 +6830,6 @@ msgstr "" msgid "Adding blacklisting entry for peer `%s':`%s'\n" msgstr "" -#: src/transport/gnunet-service-transport_ats.c:137 -msgid "# Addresses given to ATS" -msgstr "" - #: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "" @@ -7105,42 +7135,6 @@ msgstr "" msgid "# HELLOs given to peerinfo" msgstr "" -#: src/transport/gnunet-transport-profiler.c:220 -#, c-format -msgid "%llu B in %llu ms == %.2f KB/s!\n" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:577 -msgid "send data to peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:581 -msgid "receive data from peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:586 -msgid "iterations" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:591 -#, fuzzy -msgid "number of messages to send" -msgstr "nombre de valeurs" - -#: src/transport/gnunet-transport-profiler.c:596 -msgid "message size to use" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:601 -#: src/transport/gnunet-transport.c:1404 -msgid "peer identity" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:614 -#: src/transport/gnunet-transport.c:1426 -msgid "Direct access to transport service." -msgstr "" - #: src/transport/gnunet-transport.c:406 #, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" @@ -7270,6 +7264,11 @@ msgstr "" msgid "do not resolve hostnames" msgstr "" +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 +msgid "peer identity" +msgstr "" + #: src/transport/gnunet-transport.c:1408 msgid "monitor plugin sessions" msgstr "" @@ -7278,7 +7277,38 @@ msgstr "" msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "" -#: src/transport/plugin_transport_http_client.c:1489 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 +msgid "Direct access to transport service." +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:581 +msgid "receive data from peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:586 +msgid "iterations" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:591 +#, fuzzy +msgid "number of messages to send" +msgstr "nombre de valeurs" + +#: src/transport/gnunet-transport-profiler.c:596 +msgid "message size to use" +msgstr "" + +#: src/transport/plugin_transport_http_client.c:1488 #: src/transport/plugin_transport_http_server.c:2331 #: src/transport/plugin_transport_http_server.c:3562 #: src/transport/plugin_transport_tcp.c:3773 @@ -7286,24 +7316,24 @@ msgstr "" msgid "TCP_STEALTH not supported on this platform.\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2141 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2190 +#: src/transport/plugin_transport_http_client.c:2189 #: src/transport/plugin_transport_http_server.c:3276 #, c-format msgid "Shutting down plugin `%s'\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2207 +#: src/transport/plugin_transport_http_client.c:2206 #: src/transport/plugin_transport_http_server.c:3346 #, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2241 +#: src/transport/plugin_transport_http_client.c:2240 #, c-format msgid "Maximum number of requests is %u\n" msgstr "" @@ -7312,7 +7342,7 @@ msgstr "" #, c-format msgid "" "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " -"size %u\n" +"size %lu\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2040 @@ -7351,7 +7381,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2935 -#: src/transport/plugin_transport_udp.c:3397 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -7543,66 +7573,66 @@ msgstr "" msgid "TCP transport advertises itself as being on port %llu\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3169 +#: src/transport/plugin_transport_udp_broadcasting.c:169 +msgid "# Multicast HELLO beacons received via UDP" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:571 +#, c-format +msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" +msgstr "" + +#: src/transport/plugin_transport_udp.c:3170 #, c-format msgid "" "UDP could not transmit message to `%s': Network seems down, please check " "your network configuration\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3182 +#: src/transport/plugin_transport_udp.c:3183 msgid "" "UDP could not transmit IPv6 message! Please check your network configuration " "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3465 -#: src/transport/plugin_transport_udp.c:3550 +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Résolution de « %s » échouée : %s\n" -#: src/transport/plugin_transport_udp.c:3479 +#: src/transport/plugin_transport_udp.c:3480 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3558 +#: src/transport/plugin_transport_udp.c:3559 msgid "Failed to open UDP sockets\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3628 -#: src/transport/plugin_transport_udp.c:3641 +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3666 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv4 address" msgstr "adresse invalide" -#: src/transport/plugin_transport_udp.c:3688 +#: src/transport/plugin_transport_udp.c:3689 #, fuzzy msgid "must be valid IPv6 address" msgstr "adresse invalide" -#: src/transport/plugin_transport_udp.c:3749 +#: src/transport/plugin_transport_udp.c:3750 msgid "Failed to create UDP network sockets\n" msgstr "" -#: src/transport/plugin_transport_udp_broadcasting.c:169 -msgid "# Multicast HELLO beacons received via UDP" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:553 -msgid "" -"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:571 -#, c-format -msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "" - #: src/transport/plugin_transport_unix.c:1396 #, c-format msgid "Cannot bind to `%s'\n" @@ -7775,7 +7805,7 @@ msgid "do daemonize (detach from terminal)" msgstr "" #: src/transport/tcp_service_legacy.c:1397 -#: src/transport/transport-testing2.c:983 src/util/service.c:2072 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 #: src/util/service.c:2084 #, c-format msgid "Malformed configuration file `%s', exit ...\n" @@ -7833,7 +7863,7 @@ msgstr "" #: src/util/bio.c:359 #, c-format -msgid "String `%s' longer than allowed (%u > %u)" +msgid "String `%s' longer than allowed (%u > %lu)" msgstr "" #: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 @@ -8554,63 +8584,63 @@ msgstr "" msgid "Failed to expand `$HOME': environment variable `HOME' not set" msgstr "" -#: src/util/strings.c:1240 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "" -#: src/util/strings.c:1248 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1255 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1263 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "" -#: src/util/strings.c:1272 +#: src/util/strings.c:1273 #, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "" -#: src/util/strings.c:1499 src/util/strings.c:1510 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "" -#: src/util/strings.c:1519 +#: src/util/strings.c:1520 #, c-format msgid "Malformed port policy `%s'\n" msgstr "" -#: src/util/strings.c:1602 src/util/strings.c:1631 src/util/strings.c:1678 -#: src/util/strings.c:1698 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "" -#: src/util/strings.c:1656 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "" -#: src/util/strings.c:1707 +#: src/util/strings.c:1708 #, c-format msgid "Invalid format: `%s'\n" msgstr "fornat invalide : « %s »\n" -#: src/util/strings.c:1760 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "" -#: src/util/strings.c:1810 +#: src/util/strings.c:1811 #, c-format msgid "Wrong format `%s' for netmask\n" msgstr "" -#: src/util/strings.c:1841 +#: src/util/strings.c:1842 #, c-format msgid "Wrong format `%s' for network\n" msgstr "" @@ -8790,8 +8820,8 @@ msgstr "" msgid "Setup tunnels via VPN." msgstr "Configurer des tunnels via VPN." -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:420 -#: src/zonemaster/gnunet-service-zonemaster.c:849 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 msgid "Failed to connect to the namestore!\n" msgstr "" diff --git a/po/it.po b/po/it.po index 19a5cd85f..d90073110 100644 --- a/po/it.po +++ b/po/it.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gnunet 0.10.1\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2020-10-13 16:12+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2019-10-16 11:00+0200\n" "Last-Translator: Sebastiano Pistore \n" "Language-Team: Italian \n" @@ -20,7 +20,7 @@ msgstr "" "X-Generator: Poedit 2.2.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1303 +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 #, c-format msgid "Ego `%s' not known to identity service\n" msgstr "" @@ -31,8 +31,8 @@ msgid "Issuer public key `%s' is not well-formed\n" msgstr "" #: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 -#: src/namestore/gnunet-namestore-fcfsd.c:1154 #: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 #, c-format msgid "Failed to connect to namestore\n" msgstr "" @@ -492,13 +492,80 @@ msgstr "" msgid "Initiating shutdown as requested by client.\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:896 -msgid "Stop logging\n" +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 +#, c-format +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:952 +#: src/ats/gnunet-ats-solver-eval.c:3011 #, c-format -msgid "Start logging `%s'\n" +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3063 +#, c-format +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997 +msgid "solver to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 +msgid "experiment to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3564 +msgid "print logging" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:326 +#, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:336 +#, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:382 +#, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:474 +#, c-format +msgid "Failed to initialize solver `%s'!\n" +msgstr "" + +#: src/ats/plugin_ats_proportional.c:1142 +#, c-format +msgid "Invalid %s configuration %f \n" +msgstr "" + +#: src/ats/plugin_ats_proportional.c:1165 +#, c-format +msgid "Invalid %s configuration %f\n" msgstr "" #: src/ats-tests/ats-testing.c:420 @@ -511,6 +578,15 @@ msgstr "" msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "" +#: src/ats-tests/ats-testing-log.c:896 +msgid "Stop logging\n" +msgstr "" + +#: src/ats-tests/ats-testing-log.c:952 +#, c-format +msgid "Start logging `%s'\n" +msgstr "" + #: src/ats-tests/gnunet-ats-sim.c:92 #, c-format msgid "" @@ -518,16 +594,6 @@ msgid "" "= %u KiB/s\n" msgstr "" -#: src/ats-tests/gnunet-solver-eval.c:997 src/ats/gnunet-ats-solver-eval.c:3552 -msgid "solver to use" -msgstr "" - -#: src/ats-tests/gnunet-solver-eval.c:1003 -#: src/ats-tests/gnunet-solver-eval.c:1008 -#: src/ats/gnunet-ats-solver-eval.c:3557 -msgid "experiment to use" -msgstr "" - #: src/ats-tool/gnunet-ats.c:299 #, c-format msgid "%u address resolutions had a timeout\n" @@ -644,72 +710,6 @@ msgstr "" msgid "Print information about ATS state" msgstr "" -#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 -#, c-format -msgid "" -"Could not load quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3011 -#, c-format -msgid "" -"No outbound quota configured for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3063 -#, c-format -msgid "" -"No outbound quota configure for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3564 -msgid "print logging" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3569 -msgid "save logging to disk" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3574 -msgid "disable normalization" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:326 -#, c-format -msgid "" -"Could not load %s quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:336 -#, c-format -msgid "%s quota configured for network `%s' is %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:382 -#, c-format -msgid "" -"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:474 -#, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "" - -#: src/ats/plugin_ats_proportional.c:1142 -#, c-format -msgid "Invalid %s configuration %f \n" -msgstr "" - -#: src/ats/plugin_ats_proportional.c:1165 -#, c-format -msgid "Invalid %s configuration %f\n" -msgstr "" - #: src/auction/gnunet-auction-create.c:163 msgid "description of the item to be sold" msgstr "" @@ -747,7 +747,7 @@ msgstr "" #: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 #: src/conversation/gnunet-conversation-test.c:256 -#: src/revocation/gnunet-revocation.c:552 src/template/gnunet-template.c:75 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 msgid "help text" msgstr "" @@ -840,28 +840,6 @@ msgstr "" msgid "Connection to conversation service lost, trying to reconnect\n" msgstr "" -#: src/conversation/gnunet-conversation-test.c:120 -#, c-format -msgid "" -"\n" -"End of transmission. Have a GNU day.\n" -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:146 -#, c-format -msgid "" -"\n" -"We are now playing your recording back. If you can hear it, your audio " -"settings are working..." -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:218 -#, c-format -msgid "" -"We will now be recording you for %s. After that time, the recording will be " -"played back to you..." -msgstr "" - #: src/conversation/gnunet-conversation.c:264 #, c-format msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" @@ -1118,8 +1096,30 @@ msgstr "" msgid "Enables having a conversation with other GNUnet users." msgstr "" -#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#: src/conversation/gnunet-conversation-test.c:120 +#, c-format +msgid "" +"\n" +"End of transmission. Have a GNU day.\n" +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:146 +#, c-format +msgid "" +"\n" +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:218 +#, c-format +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" + #: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 #, c-format msgid "Read error from STDIN: %d %s\n" msgstr "" @@ -1243,7 +1243,7 @@ msgstr "" msgid "Failed to allocate %u bytes for second packet\n" msgstr "Generazione statistiche fallita\n" -#: src/conversation/gnunet-service-conversation.c:1287 +#: src/conversation/gnunet-service-conversation.c:1286 #, c-format msgid "Could not open line, port %s already in use!\n" msgstr "" @@ -1936,7 +1936,7 @@ msgid "" msgstr "" #: src/datastore/plugin_datastore_sqlite.c:1316 -#: src/namecache/plugin_namecache_sqlite.c:570 +#: src/namecache/plugin_namecache_sqlite.c:564 #: src/namestore/plugin_namestore_sqlite.c:765 msgid "Sqlite database running\n" msgstr "" @@ -2007,6 +2007,52 @@ msgstr "" msgid "Prints all packets that go through the DHT." msgstr "" +#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 +#, c-format +msgid "Exiting as the number of peers is %u\n" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +msgid "number of peers to start" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:961 +msgid "number of PUTs to perform per peer" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1023 +msgid "Measure quality and performance of the DHT service." +msgstr "" + #: src/dht/gnunet-dht-put.c:133 msgid "Must provide KEY and DATA for DHT put!\n" msgstr "" @@ -2252,59 +2298,14 @@ msgstr "" msgid "# DHT requests combined" msgstr "" -#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 -#, c-format -msgid "Exiting as the number of peers is %u\n" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 -msgid "number of peers to start" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:961 -msgid "number of PUTs to perform per peer" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 -#: src/testbed/gnunet-testbed-profiler.c:305 -msgid "name of the file with the login information for the testbed" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:973 -msgid "delay between rounds for collecting statistics (default: 30 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:979 -msgid "delay to start doing PUTs (default: 1 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:985 -msgid "delay to start doing GETs (default: 5 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:990 -msgid "replication degree for DHT PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:996 -msgid "chance that a peer is selected at random for PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1002 -msgid "timeout for DHT PUT and GET requests (default: 1 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1023 -msgid "Measure quality and performance of the DHT service." -msgstr "" - #: src/dht/plugin_block_dht.c:189 #, c-format msgid "Block not of type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:198 -msgid "Size mismatch for block\n" +#, c-format +msgid "Size mismatch for block with type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:209 @@ -2738,8 +2739,8 @@ msgstr "" #: src/fs/fs_download.c:1053 #, c-format msgid "" -"Internal error or bogus download URI (expected %u bytes at depth %u and " -"offset %llu/%llu, got %u bytes)" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" msgstr "" #: src/fs/fs_download.c:1075 @@ -3057,7 +3058,7 @@ msgid "" "You must specify one and only one directory name for automatic publication.\n" msgstr "" -#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:888 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "" @@ -3065,15 +3066,15 @@ msgstr "" msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:893 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "" -#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:938 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "" -#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:951 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "" @@ -3154,7 +3155,7 @@ msgstr "" msgid "You need to specify a URI argument.\n" msgstr "" -#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:707 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, c-format msgid "Failed to parse URI: %s\n" msgstr "" @@ -3167,7 +3168,7 @@ msgstr "" msgid "Target filename must be specified.\n" msgstr "" -#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:861 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 #: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, c-format msgid "Could not initialize `%s' subsystem.\n" @@ -3207,6 +3208,14 @@ msgid "" "chk/...)" msgstr "" +#: src/fs/gnunet-fs.c:128 +msgid "print a list of all indexed files" +msgstr "" + +#: src/fs/gnunet-fs.c:141 +msgid "Special file-sharing operations" +msgstr "" + #: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "" @@ -3223,14 +3232,6 @@ msgstr "" msgid "run a testbed to measure file-sharing performance" msgstr "" -#: src/fs/gnunet-fs.c:128 -msgid "print a list of all indexed files" -msgstr "" - -#: src/fs/gnunet-fs.c:141 -msgid "Special file-sharing operations" -msgstr "" - #: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" @@ -3282,143 +3283,143 @@ msgstr "" msgid "Keywords for file `%s' (%s)\n" msgstr "" -#: src/fs/gnunet-publish.c:577 +#: src/fs/gnunet-publish.c:582 msgid "Could not publish\n" msgstr "" -#: src/fs/gnunet-publish.c:603 +#: src/fs/gnunet-publish.c:611 msgid "Could not start publishing.\n" msgstr "" -#: src/fs/gnunet-publish.c:636 +#: src/fs/gnunet-publish.c:644 #, c-format msgid "Scanning directory `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:638 +#: src/fs/gnunet-publish.c:646 #, c-format msgid "Scanning file `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:644 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "" -#: src/fs/gnunet-publish.c:650 +#: src/fs/gnunet-publish.c:658 msgid "Preprocessing complete.\n" msgstr "" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:664 #, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "" -#: src/fs/gnunet-publish.c:662 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "" -#: src/fs/gnunet-publish.c:670 +#: src/fs/gnunet-publish.c:678 #, fuzzy msgid "Error scanning directory.\n" msgstr "Errore interno." -#: src/fs/gnunet-publish.c:697 +#: src/fs/gnunet-publish.c:705 #, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "" -#: src/fs/gnunet-publish.c:729 +#: src/fs/gnunet-publish.c:737 #, c-format msgid "Failed to access `%s': %s\n" msgstr "" -#: src/fs/gnunet-publish.c:746 +#: src/fs/gnunet-publish.c:754 msgid "" "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " "installed?\n" msgstr "" -#: src/fs/gnunet-publish.c:802 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "" -#: src/fs/gnunet-publish.c:809 +#: src/fs/gnunet-publish.c:817 #, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "" -#: src/fs/gnunet-publish.c:815 +#: src/fs/gnunet-publish.c:823 #, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "" -#: src/fs/gnunet-publish.c:824 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:836 src/fs/gnunet-publish.c:845 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 #: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:898 +#: src/fs/gnunet-publish.c:906 msgid "enable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-publish.c:904 +#: src/fs/gnunet-publish.c:912 msgid "" "print list of extracted keywords that would be used, but do not perform " "upload" msgstr "" -#: src/fs/gnunet-publish.c:912 +#: src/fs/gnunet-publish.c:920 msgid "" "add an additional keyword for the top-level file or directory (this option " "can be specified multiple times)" msgstr "" -#: src/fs/gnunet-publish.c:919 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "" -#: src/fs/gnunet-publish.c:924 +#: src/fs/gnunet-publish.c:932 msgid "" "do not index, perform full insertion (stores entire file in encrypted form " "in GNUnet database)" msgstr "" -#: src/fs/gnunet-publish.c:931 +#: src/fs/gnunet-publish.c:939 msgid "" "specify ID of an updated version to be published in the future (for " "namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:944 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" msgstr "" -#: src/fs/gnunet-publish.c:956 +#: src/fs/gnunet-publish.c:964 msgid "" "only simulate the process but do not do any actual publishing (useful to " "compute URIs)" msgstr "" -#: src/fs/gnunet-publish.c:963 +#: src/fs/gnunet-publish.c:971 msgid "" "set the ID of this version of the publication (for namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:971 +#: src/fs/gnunet-publish.c:979 msgid "" "URI to be published (can be used instead of passing a file to add keywords " "to the file with the respective URI)" msgstr "" -#: src/fs/gnunet-publish.c:989 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "" @@ -3806,7 +3807,7 @@ msgstr "" msgid "Unindex a file that was previously indexed with gnunet-publish." msgstr "" -#: src/gns/gns_tld_api.c:292 +#: src/gns/gns_tld_api.c:293 msgid "Expected a base32-encoded public zone key\n" msgstr "" @@ -3885,7 +3886,50 @@ msgstr "" msgid "look for GNS2DNS records instead of ANY" msgstr "" -#: src/gns/gnunet-gns-import.c:486 +#: src/gns/gnunet-gns.c:257 +#, fuzzy, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "`%s' non è un indirizzo IP valido.\n" + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 +#, c-format +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" + +#: src/gns/gnunet-gns.c:305 +#, c-format +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" + +#: src/gns/gnunet-gns.c:340 +msgid "Lookup a record for the given name" +msgstr "" + +#: src/gns/gnunet-gns.c:346 +msgid "Specify the type of the record to lookup" +msgstr "" + +#: src/gns/gnunet-gns.c:352 +msgid "Specify a timeout for the lookup" +msgstr "" + +#: src/gns/gnunet-gns.c:356 +msgid "No unneeded output" +msgstr "" + +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" + +#: src/gns/gnunet-gns.c:375 +msgid "GNUnet GNS resolver tool" +msgstr "" + +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "" @@ -4004,49 +4048,6 @@ msgstr "" msgid "GNUnet GNS proxy" msgstr "" -#: src/gns/gnunet-gns.c:257 -#, fuzzy, c-format -msgid "`%s' is not a valid DNS domain name\n" -msgstr "`%s' non è un indirizzo IP valido.\n" - -#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 -#, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "" - -#: src/gns/gnunet-gns.c:281 -msgid "Cannot resolve using GNS: GNUnet peer not running\n" -msgstr "" - -#: src/gns/gnunet-gns.c:305 -#, c-format -msgid "Invalid typename specified, assuming `ANY'\n" -msgstr "" - -#: src/gns/gnunet-gns.c:340 -msgid "Lookup a record for the given name" -msgstr "" - -#: src/gns/gnunet-gns.c:346 -msgid "Specify the type of the record to lookup" -msgstr "" - -#: src/gns/gnunet-gns.c:352 -msgid "Specify a timeout for the lookup" -msgstr "" - -#: src/gns/gnunet-gns.c:356 -msgid "No unneeded output" -msgstr "" - -#: src/gns/gnunet-gns.c:361 -msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" -msgstr "" - -#: src/gns/gnunet-gns.c:375 -msgid "GNUnet GNS resolver tool" -msgstr "" - #: src/gns/gnunet-service-gns.c:505 #, fuzzy msgid "Properly base32-encoded public key required" @@ -4057,8 +4058,8 @@ msgid "Failed to connect to the namecache!\n" msgstr "" #: src/gns/gnunet-service-gns.c:560 -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:444 -#: src/zonemaster/gnunet-service-zonemaster.c:887 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 msgid "Could not connect to DHT!\n" msgstr "" @@ -4099,66 +4100,70 @@ msgstr "" msgid "VPN returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1909 +#: src/gns/gnunet-service-gns_resolver.c:1910 #, c-format msgid "Name `%s' cannot be converted to IDNA." msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1922 +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1965 +#: src/gns/gnunet-service-gns_resolver.c:1966 #, c-format msgid "GNS lookup failed (zero records found for `%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2385 +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2408 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2576 +#: src/gns/gnunet-service-gns_resolver.c:2581 #, c-format msgid "GNS namecache returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2716 +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:167 -#, c-format -msgid "Unable to parse PKEY record `%s'\n" +#: src/gns/plugin_gnsrecord_gns.c:174 +#, fuzzy, c-format +msgid "Unable to parse zone key record `%s'\n" +msgstr "Impossibile avviare il servizio ' %s'\n" + +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:197 +#: src/gns/plugin_gnsrecord_gns.c:213 #, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:213 +#: src/gns/plugin_gnsrecord_gns.c:229 #, c-format msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:237 +#: src/gns/plugin_gnsrecord_gns.c:253 #, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:269 +#: src/gns/plugin_gnsrecord_gns.c:285 #, fuzzy, c-format msgid "Unable to parse BOX record string `%s'\n" msgstr "Impossibile avviare il servizio ' %s'\n" -#: src/gns/plugin_rest_gns.c:447 +#: src/gns/plugin_rest_gns.c:448 msgid "Gns REST API initialized\n" msgstr "" @@ -4461,7 +4466,7 @@ msgid "# hostlist URIs written to file" msgstr "" #: src/hostlist/gnunet-daemon-hostlist_client.c:1657 -#: src/transport/plugin_transport_http_client.c:2301 +#: src/transport/plugin_transport_http_client.c:2300 #, c-format msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" msgstr "" @@ -4588,57 +4593,61 @@ msgstr "`%s' non è un indirizzo IP valido.\n" msgid "Could not start hostlist HTTP server on port %u\n" msgstr "" -#: src/identity/gnunet-identity.c:209 +#: src/identity/gnunet-identity.c:214 #, c-format msgid "Failed to create ego: %s\n" msgstr "" -#: src/identity/gnunet-identity.c:250 +#: src/identity/gnunet-identity.c:255 #, c-format msgid "Failed to set default ego: %s\n" msgstr "" -#: src/identity/gnunet-identity.c:446 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "" -#: src/identity/gnunet-identity.c:451 +#: src/identity/gnunet-identity.c:467 msgid "delete ego NAME " msgstr "" -#: src/identity/gnunet-identity.c:457 +#: src/identity/gnunet-identity.c:473 msgid "" "set the private key for the identity to PRIVATE_KEY (use together with -C)" msgstr "" -#: src/identity/gnunet-identity.c:461 +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + +#: src/identity/gnunet-identity.c:482 msgid "display all egos" msgstr "" -#: src/identity/gnunet-identity.c:465 +#: src/identity/gnunet-identity.c:486 msgid "reduce output" msgstr "" -#: src/identity/gnunet-identity.c:472 +#: src/identity/gnunet-identity.c:493 msgid "" "set default identity to NAME for a subsystem SUBSYSTEM (use together with -" "s) or restrict results to NAME (use together with -d)" msgstr "" -#: src/identity/gnunet-identity.c:476 +#: src/identity/gnunet-identity.c:497 msgid "run in monitor mode egos" msgstr "" -#: src/identity/gnunet-identity.c:480 +#: src/identity/gnunet-identity.c:501 msgid "display private keys as well" msgstr "" -#: src/identity/gnunet-identity.c:487 +#: src/identity/gnunet-identity.c:508 msgid "" "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" msgstr "" -#: src/identity/gnunet-identity.c:502 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "" @@ -4674,26 +4683,26 @@ msgstr "" msgid "no matching ego found" msgstr "" -#: src/identity/gnunet-service-identity.c:1072 +#: src/identity/gnunet-service-identity.c:1133 #, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "" -#: src/identity/gnunet-service-identity.c:1130 +#: src/identity/gnunet-service-identity.c:1191 #, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" msgstr "" -#: src/identity/gnunet-service-identity.c:1139 +#: src/identity/gnunet-service-identity.c:1200 #, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "" -#: src/identity/plugin_rest_identity.c:1384 +#: src/identity/plugin_rest_identity.c:1385 msgid "Identity REST API initialized\n" msgstr "" -#: src/json/json.c:133 +#: src/json/json.c:139 #, fuzzy, c-format msgid "Failed to parse JSON in option `%s': %s (%s)\n" msgstr "Impossibile avviare il servizio ' %s'\n" @@ -4738,7 +4747,7 @@ msgstr "# messaggi PONG ricevuti" msgid "You must specify a name\n" msgstr "È necessario specificare un nome\n" -#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1640 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "" @@ -4746,20 +4755,20 @@ msgstr "" msgid "specifies the public key of the zone to look in" msgstr "" -#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1701 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 msgid "GNUnet zone manipulation tool" msgstr "" -#: src/namecache/namecache_api.c:293 +#: src/namecache/namecache_api.c:285 msgid "Namecache failed to cache block" msgstr "" -#: src/namecache/namecache_api.c:381 +#: src/namecache/namecache_api.c:373 msgid "Error communicating with namecache service" msgstr "" #: src/namecache/plugin_namecache_flat.c:118 -#: src/namecache/plugin_namecache_flat.c:256 +#: src/namecache/plugin_namecache_flat.c:253 #: src/namestore/plugin_namestore_flat.c:176 #: src/namestore/plugin_namestore_flat.c:424 #: src/peerstore/plugin_peerstore_flat.c:380 @@ -4781,7 +4790,7 @@ msgstr "Generazione statistiche fallita\n" msgid "Unable to read file: %s.\n" msgstr "Impossibile leggere il file" -#: src/namecache/plugin_namecache_flat.c:410 +#: src/namecache/plugin_namecache_flat.c:404 msgid "flat plugin running\n" msgstr "" @@ -4793,68 +4802,6 @@ msgstr "" msgid "Failed to setup database at `%s'\n" msgstr "Impossibile avviare il servizio ' %s'\n" -#: src/namestore/gnunet-namestore-fcfsd.c:552 -#, c-format -msgid "Unsupported form value `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:579 -#, c-format -msgid "Failed to create record for domain `%s': %s\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:600 -msgid "Error when mapping zone to name\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:632 -#, c-format -msgid "Found existing name `%s' for the given key\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:694 -#, c-format -msgid "Found %u existing records for domain `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:784 -#, c-format -msgid "Failed to create page for `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:803 -#, c-format -msgid "Failed to setup post processor for `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:840 -msgid "Domain name must not contain `.'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:849 -msgid "Domain name must not contain `+'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1084 -msgid "No ego configured for `fcfsd` subsystem\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1115 -msgid "Failed to start HTTP server\n" -msgstr "Impossibile avviare il server HTTP\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1163 -msgid "Failed to connect to identity\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1190 -msgid "name of the zone that is to be managed by FCFSD" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1210 -msgid "GNU Name System First Come First Serve name registration service" -msgstr "" - #: src/namestore/gnunet-namestore.c:334 #, c-format msgid "Adding record failed: %s\n" @@ -4870,11 +4817,17 @@ msgstr "" msgid "Deleting record failed%s%s\n" msgstr "" -#: src/namestore/gnunet-namestore.c:656 src/namestore/gnunet-namestore.c:667 +#: src/namestore/gnunet-namestore.c:656 #, c-format msgid "A %s record exists already under `%s', no other records can be added.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:680 #, c-format msgid "" @@ -4882,11 +4835,16 @@ msgid "" "zone.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:696 src/namestore/gnunet-namestore.c:710 +#: src/namestore/gnunet-namestore.c:696 #, c-format msgid "Records already exist under `%s', cannot add `%s' record.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:726 #, c-format msgid "" @@ -4917,7 +4875,7 @@ msgstr "" #: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 #: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 #: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 -#: src/namestore/gnunet-namestore.c:1229 +#: src/namestore/gnunet-namestore.c:1228 #, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "" @@ -4933,7 +4891,7 @@ msgstr "" #: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 #: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 -#: src/namestore/gnunet-namestore.c:1231 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "" @@ -4952,7 +4910,7 @@ msgstr "" msgid "Value `%s' invalid for record type `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1238 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, c-format msgid "Invalid time format `%s'\n" msgstr "" @@ -4961,23 +4919,23 @@ msgstr "" msgid "del" msgstr "" -#: src/namestore/gnunet-namestore.c:1198 +#: src/namestore/gnunet-namestore.c:1197 #, c-format msgid "Invalid public key for reverse lookup `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1221 +#: src/namestore/gnunet-namestore.c:1220 #: src/peerinfo-tool/gnunet-peerinfo.c:736 #, c-format msgid "Invalid URI `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1291 +#: src/namestore/gnunet-namestore.c:1290 #, c-format msgid "Label `%s' contains `.' which is not allowed\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1341 +#: src/namestore/gnunet-namestore.c:1340 #, c-format msgid "" "No default identity configured for `namestore' subsystem\n" @@ -4985,102 +4943,169 @@ msgid "" "Run gnunet-identity -d to get a list of choices for $NAME\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1406 +#: src/namestore/gnunet-namestore.c:1405 #, c-format msgid "Superfluous command line arguments (starting with `%s') ignored\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1435 +#: src/namestore/gnunet-namestore.c:1434 #, c-format msgid "Cannot connect to identity service\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1482 +#: src/namestore/gnunet-namestore.c:1481 msgid "Empty record line argument is not allowed.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1494 +#: src/namestore/gnunet-namestore.c:1493 #, c-format msgid "Invalid expiration time `%s' (must be without unit)\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1506 src/namestore/gnunet-namestore.c:1522 -#: src/namestore/gnunet-namestore.c:1539 +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 #, c-format msgid "Missing entries in record line `%s'.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1514 +#: src/namestore/gnunet-namestore.c:1513 #, fuzzy, c-format msgid "Unknown record type `%s'\n" msgstr "Comando `%s' sconosciuto.\n" -#: src/namestore/gnunet-namestore.c:1552 +#: src/namestore/gnunet-namestore.c:1551 #, fuzzy, c-format msgid "Invalid record data for type %s: `%s'.\n" msgstr "Indirizzo IPv6 non valido: `%s'\n" -#: src/namestore/gnunet-namestore.c:1609 +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "" -#: src/namestore/gnunet-namestore.c:1612 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "" -#: src/namestore/gnunet-namestore.c:1616 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "" -#: src/namestore/gnunet-namestore.c:1623 +#: src/namestore/gnunet-namestore.c:1622 msgid "" "expiration time for record to use (for adding only), \"never\" is possible" msgstr "" -#: src/namestore/gnunet-namestore.c:1629 +#: src/namestore/gnunet-namestore.c:1628 msgid "set the desired nick name for the zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1634 +#: src/namestore/gnunet-namestore.c:1633 msgid "monitor changes in the namestore" msgstr "" -#: src/namestore/gnunet-namestore.c:1646 +#: src/namestore/gnunet-namestore.c:1645 msgid "determine our name for the given PKEY" msgstr "" -#: src/namestore/gnunet-namestore.c:1653 +#: src/namestore/gnunet-namestore.c:1652 msgid "" "set record set to values given by (possibly multiple) RECORDLINES; can be " "specified multiple times" msgstr "" -#: src/namestore/gnunet-namestore.c:1659 +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "" -#: src/namestore/gnunet-namestore.c:1664 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1670 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "" -#: src/namestore/gnunet-namestore.c:1674 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "" -#: src/namestore/gnunet-namestore.c:1680 +#: src/namestore/gnunet-namestore.c:1679 msgid "" "create shadow record (only valid if all other records of the same type have " "expired" msgstr "" -#: src/namestore/gnunet-namestore.c:1686 +#: src/namestore/gnunet-namestore.c:1685 msgid "name of the ego controlling the zone" msgstr "" +#: src/namestore/gnunet-namestore-fcfsd.c:552 +#, c-format +msgid "Unsupported form value `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:579 +#, c-format +msgid "Failed to create record for domain `%s': %s\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 +#, c-format +msgid "Found existing name `%s' for the given key\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "Errore interno." + +#: src/namestore/gnunet-namestore-fcfsd.c:707 +#, c-format +msgid "Found %u existing records for domain `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:796 +#, c-format +msgid "Failed to create page for `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:815 +#, c-format +msgid "Failed to setup post processor for `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:850 +msgid "Domain name must not contain `.'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:859 +msgid "Domain name must not contain `+'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1094 +msgid "No ego configured for `fcfsd` subsystem\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1125 +msgid "Failed to start HTTP server\n" +msgstr "Impossibile avviare il server HTTP\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1173 +msgid "Failed to connect to identity\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 +msgid "GNU Name System First Come First Serve name registration service" +msgstr "" + #: src/namestore/gnunet-service-namestore.c:866 #, c-format msgid "Failed to replicate block in namecache: %s\n" @@ -5108,7 +5133,7 @@ msgstr "" msgid "Namestore database file `%s' malformed\n" msgstr "" -#: src/namestore/plugin_namestore_flat.c:789 +#: src/namestore/plugin_namestore_flat.c:792 msgid "Flat file database running\n" msgstr "" @@ -5387,37 +5412,91 @@ msgstr "" msgid "`upnpc' command not found\n" msgstr "" +#: src/nse/gnunet-nse.c:124 +msgid "Show network size estimates from NSE service." +msgstr "" + #: src/nse/gnunet-nse-profiler.c:857 msgid "limit to the number of connections to NSE services, 0 for none" msgstr "" -#: src/nse/gnunet-nse-profiler.c:864 -msgid "name of the file for writing connection information and statistics" +#: src/nse/gnunet-nse-profiler.c:864 +msgid "name of the file for writing connection information and statistics" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:879 +msgid "name of the file for writing the main results" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:888 +msgid "Number of peers to run in each round, separated by commas" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:900 +msgid "delay between rounds" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:912 +msgid "Measure quality and performance of the NSE service." +msgstr "" + +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 +msgid "Value is too large.\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:175 +#, c-format +msgid "Removing expired address of transport `%s'\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:306 +#, c-format +msgid "Failed to parse HELLO in file `%s': %s\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 +#, c-format +msgid "Failed to parse HELLO in file `%s'\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:426 +msgid "# peers known" +msgstr "# peer conosciuti" + +#: src/peerinfo/gnunet-service-peerinfo.c:468 +#, c-format +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:879 -msgid "name of the file for writing the main results" +#: src/peerinfo/gnunet-service-peerinfo.c:624 +#, c-format +msgid "Scanning directory `%s'\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:888 -msgid "Number of peers to run in each round, separated by commas" +#: src/peerinfo/gnunet-service-peerinfo.c:631 +#, c-format +msgid "Still no peers found in `%s'!\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:900 -msgid "delay between rounds" +#: src/peerinfo/gnunet-service-peerinfo.c:1024 +#, c-format +msgid "Cleaning up directory `%s'\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:912 -msgid "Measure quality and performance of the NSE service." +#: src/peerinfo/gnunet-service-peerinfo.c:1319 +#, c-format +msgid "Importing HELLOs from `%s'\n" msgstr "" -#: src/nse/gnunet-nse.c:124 -msgid "Show network size estimates from NSE service." +#: src/peerinfo/gnunet-service-peerinfo.c:1332 +msgid "Skipping import of included HELLOs\n" msgstr "" -#: src/nse/gnunet-service-nse.c:1443 -#: src/revocation/gnunet-service-revocation.c:834 src/util/gnunet-scrypt.c:257 -msgid "Value is too large.\n" +#: src/peerinfo/peerinfo_api.c:217 +msgid "Failed to receive response from `PEERINFO' service." msgstr "" #: src/peerinfo-tool/gnunet-peerinfo.c:237 @@ -5514,60 +5593,6 @@ msgstr "" msgid "Peerinfo REST API initialized\n" msgstr "" -#: src/peerinfo/gnunet-service-peerinfo.c:175 -#, c-format -msgid "Removing expired address of transport `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:306 -#, c-format -msgid "Failed to parse HELLO in file `%s': %s\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:323 -#: src/peerinfo/gnunet-service-peerinfo.c:348 -#, c-format -msgid "Failed to parse HELLO in file `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:426 -msgid "# peers known" -msgstr "# peer conosciuti" - -#: src/peerinfo/gnunet-service-peerinfo.c:468 -#, c-format -msgid "" -"File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:624 -#, c-format -msgid "Scanning directory `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:631 -#, c-format -msgid "Still no peers found in `%s'!\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1024 -#, c-format -msgid "Cleaning up directory `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1319 -#, c-format -msgid "Importing HELLOs from `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1332 -msgid "Skipping import of included HELLOs\n" -msgstr "" - -#: src/peerinfo/peerinfo_api.c:217 -msgid "Failed to receive response from `PEERINFO' service." -msgstr "" - #: src/peerstore/gnunet-peerstore.c:92 msgid "peerstore" msgstr "" @@ -5751,7 +5776,7 @@ msgstr "" msgid "re:claimID command line tool" msgstr "" -#: src/reclaim/plugin_rest_openid_connect.c:2618 +#: src/reclaim/plugin_rest_openid_connect.c:2613 msgid "OpenID Connect REST API initialized\n" msgstr "" @@ -5901,112 +5926,129 @@ msgstr "" msgid "Internal error, key revocation might have failed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:251 +#: src/revocation/gnunet-revocation.c:252 msgid "Cancelling calculation.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:296 +#: src/revocation/gnunet-revocation.c:299 #, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:335 +#: src/revocation/gnunet-revocation.c:339 #, c-format msgid "Ego `%s' not found.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:349 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:359 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "" -#: src/revocation/gnunet-revocation.c:371 +#: src/revocation/gnunet-revocation.c:378 msgid "Continuing calculation where left off...\n" msgstr "" -#: src/revocation/gnunet-revocation.c:378 +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "" -#: src/revocation/gnunet-revocation.c:416 +#: src/revocation/gnunet-revocation.c:423 #, c-format msgid "Public key `%s' malformed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:426 +#: src/revocation/gnunet-revocation.c:433 msgid "" "Testing and revoking at the same time is not allowed, only executing test.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:456 +#: src/revocation/gnunet-revocation.c:463 msgid "No filename to store revocation certificate given.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:471 +#: src/revocation/gnunet-revocation.c:480 #, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:493 +#: src/revocation/gnunet-revocation.c:488 +#, fuzzy, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "Generazione statistiche fallita\n" + +#: src/revocation/gnunet-revocation.c:510 msgid "No action specified. Nothing to do.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:512 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "" -#: src/revocation/gnunet-revocation.c:520 +#: src/revocation/gnunet-revocation.c:537 msgid "" "revoke the private key associated for the the private key associated with " "the ego NAME " msgstr "" -#: src/revocation/gnunet-revocation.c:527 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "" -#: src/revocation/gnunet-revocation.c:534 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "" -#: src/revocation/gnunet-revocation.c:540 +#: src/revocation/gnunet-revocation.c:557 msgid "number of epochs to calculate for" msgstr "" -#: src/revocation/gnunet-service-revocation.c:454 +#: src/revocation/gnunet-service-revocation.c:494 msgid "# unsupported revocations received via set union" msgstr "" -#: src/revocation/gnunet-service-revocation.c:464 +#: src/revocation/gnunet-service-revocation.c:504 #, fuzzy msgid "# revocation messages received via set union" msgstr "# messaggi PONG ricevuti" -#: src/revocation/gnunet-service-revocation.c:469 +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:473 +#: src/revocation/gnunet-service-revocation.c:513 msgid "# revocation set unions failed" msgstr "" -#: src/revocation/gnunet-service-revocation.c:481 +#: src/revocation/gnunet-service-revocation.c:521 msgid "# revocation set unions completed" msgstr "" -#: src/revocation/gnunet-service-revocation.c:519 +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:871 +#: src/revocation/gnunet-service-revocation.c:912 msgid "Could not open revocation database file!" msgstr "" +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" + +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" + +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" + #: src/rps/gnunet-rps-profiler.c:3200 msgid "duration of the profiling" msgstr "" @@ -6023,18 +6065,6 @@ msgstr "" msgid "Measure quality and performance of the RPS service." msgstr "" -#: src/rps/gnunet-rps.c:270 -msgid "Seed a PeerID" -msgstr "" - -#: src/rps/gnunet-rps.c:275 -msgid "Get updates of view (0 for infinite updates)" -msgstr "" - -#: src/rps/gnunet-rps.c:279 -msgid "Get peers from biased stream" -msgstr "" - #: src/scalarproduct/gnunet-scalarproduct.c:229 msgid "You must specify at least one message ID to check!\n" msgstr "" @@ -6089,10 +6119,10 @@ msgstr "" msgid "Calculate the Vectorproduct with a GNUnet peer." msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 msgid "Connect to CADET failed\n" msgstr "" @@ -6117,7 +6147,7 @@ msgid "also profile decryption" msgstr "" #: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 -#: src/setu/gnunet-service-setu.c:3635 +#: src/setu/gnunet-service-setu.c:3633 #, fuzzy msgid "Could not connect to CADET service\n" msgstr "Impossibile avviare il servizio.\n" @@ -6442,6 +6472,15 @@ msgstr "" msgid "%.s Unknown result code." msgstr "" +#: src/testbed/gnunet_testbed_mpi_spawn.c:119 +msgid "Waiting for child to exit.\n" +msgstr "" + +#: src/testbed/gnunet_testbed_mpi_spawn.c:242 +#, c-format +msgid "Spawning process `%s'\n" +msgstr "" + #: src/testbed/gnunet-testbed-profiler.c:290 msgid "tolerate COUNT number of continious timeout failures" msgstr "" @@ -6453,15 +6492,6 @@ msgid "" "signal is received" msgstr "" -#: src/testbed/gnunet_testbed_mpi_spawn.c:119 -msgid "Waiting for child to exit.\n" -msgstr "" - -#: src/testbed/gnunet_testbed_mpi_spawn.c:242 -#, c-format -msgid "Spawning process `%s'\n" -msgstr "" - #: src/testbed/testbed_api.c:399 #, c-format msgid "Adding host %u failed with error: %s\n" @@ -6581,9 +6611,9 @@ msgid "Topology file needs more peers than given ones\n" msgstr "" #: src/testbed/testbed_api_topology.c:1153 -#, c-format -msgid "Ignoring to connect peer %u to peer %u\n" -msgstr "" +#, fuzzy, c-format +msgid "Ignoring to connect peer %lu to peer %lu\n" +msgstr "Generazione statistiche fallita\n" #: src/testing/gnunet-testing.c:185 #, c-format @@ -6750,7 +6780,7 @@ msgid "GNUnet topology control" msgstr "" #: src/transport/gnunet-communicator-tcp.c:3221 -#: src/transport/gnunet-communicator-udp.c:2995 +#: src/transport/gnunet-communicator-udp.c:3076 #: src/transport/gnunet-service-tng.c:10014 #: src/transport/gnunet-service-transport.c:2626 msgid "Transport service is lacking key configuration settings. Exiting.\n" @@ -6760,7 +6790,7 @@ msgstr "" msgid "GNUnet TCP communicator" msgstr "" -#: src/transport/gnunet-communicator-udp.c:3067 +#: src/transport/gnunet-communicator-udp.c:3148 msgid "GNUnet UDP communicator" msgstr "" @@ -6783,6 +6813,10 @@ msgstr "" msgid "GNUnet UNIX domain socket communicator" msgstr "" +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + #: src/transport/gnunet-service-transport.c:445 msgid "# messages dropped due to slow client" msgstr "" @@ -6823,10 +6857,6 @@ msgstr "" msgid "Adding blacklisting entry for peer `%s':`%s'\n" msgstr "" -#: src/transport/gnunet-service-transport_ats.c:137 -msgid "# Addresses given to ATS" -msgstr "" - #: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "" @@ -7144,41 +7174,6 @@ msgstr "" msgid "# HELLOs given to peerinfo" msgstr "" -#: src/transport/gnunet-transport-profiler.c:220 -#, c-format -msgid "%llu B in %llu ms == %.2f KB/s!\n" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:577 -msgid "send data to peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:581 -msgid "receive data from peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:586 -msgid "iterations" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:591 -msgid "number of messages to send" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:596 -msgid "message size to use" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:601 -#: src/transport/gnunet-transport.c:1404 -msgid "peer identity" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:614 -#: src/transport/gnunet-transport.c:1426 -msgid "Direct access to transport service." -msgstr "" - #: src/transport/gnunet-transport.c:406 #, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" @@ -7311,6 +7306,11 @@ msgstr "" msgid "do not resolve hostnames" msgstr "" +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 +msgid "peer identity" +msgstr "" + #: src/transport/gnunet-transport.c:1408 msgid "monitor plugin sessions" msgstr "" @@ -7319,7 +7319,37 @@ msgstr "" msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "" -#: src/transport/plugin_transport_http_client.c:1489 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 +msgid "Direct access to transport service." +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:581 +msgid "receive data from peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:586 +msgid "iterations" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:591 +msgid "number of messages to send" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:596 +msgid "message size to use" +msgstr "" + +#: src/transport/plugin_transport_http_client.c:1488 #: src/transport/plugin_transport_http_server.c:2331 #: src/transport/plugin_transport_http_server.c:3562 #: src/transport/plugin_transport_tcp.c:3773 @@ -7327,24 +7357,24 @@ msgstr "" msgid "TCP_STEALTH not supported on this platform.\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2141 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2190 +#: src/transport/plugin_transport_http_client.c:2189 #: src/transport/plugin_transport_http_server.c:3276 #, c-format msgid "Shutting down plugin `%s'\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2207 +#: src/transport/plugin_transport_http_client.c:2206 #: src/transport/plugin_transport_http_server.c:3346 #, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2241 +#: src/transport/plugin_transport_http_client.c:2240 #, c-format msgid "Maximum number of requests is %u\n" msgstr "" @@ -7353,7 +7383,7 @@ msgstr "" #, c-format msgid "" "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " -"size %u\n" +"size %lu\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2040 @@ -7392,7 +7422,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2935 -#: src/transport/plugin_transport_udp.c:3397 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -7585,67 +7615,67 @@ msgstr "" msgid "TCP transport advertises itself as being on port %llu\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3169 +#: src/transport/plugin_transport_udp_broadcasting.c:169 +#, fuzzy +msgid "# Multicast HELLO beacons received via UDP" +msgstr "# messaggi PONG ricevuti" + +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:571 +#, c-format +msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" +msgstr "" + +#: src/transport/plugin_transport_udp.c:3170 #, c-format msgid "" "UDP could not transmit message to `%s': Network seems down, please check " "your network configuration\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3182 +#: src/transport/plugin_transport_udp.c:3183 msgid "" "UDP could not transmit IPv6 message! Please check your network configuration " "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3465 -#: src/transport/plugin_transport_udp.c:3550 +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Generazione statistiche fallita\n" -#: src/transport/plugin_transport_udp.c:3479 +#: src/transport/plugin_transport_udp.c:3480 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3558 +#: src/transport/plugin_transport_udp.c:3559 msgid "Failed to open UDP sockets\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3628 -#: src/transport/plugin_transport_udp.c:3641 +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3666 +#: src/transport/plugin_transport_udp.c:3667 msgid "must be valid IPv4 address" msgstr "deve essere un indirizzo IPv4 valido" -#: src/transport/plugin_transport_udp.c:3688 +#: src/transport/plugin_transport_udp.c:3689 #, fuzzy msgid "must be valid IPv6 address" msgstr "deve essere un indirizzo IPv4 valido" -#: src/transport/plugin_transport_udp.c:3749 +#: src/transport/plugin_transport_udp.c:3750 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "Generazione statistiche fallita\n" -#: src/transport/plugin_transport_udp_broadcasting.c:169 -#, fuzzy -msgid "# Multicast HELLO beacons received via UDP" -msgstr "# messaggi PONG ricevuti" - -#: src/transport/plugin_transport_udp_broadcasting.c:553 -msgid "" -"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:571 -#, c-format -msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "" - #: src/transport/plugin_transport_unix.c:1396 #, fuzzy, c-format msgid "Cannot bind to `%s'\n" @@ -7824,7 +7854,7 @@ msgid "do daemonize (detach from terminal)" msgstr "" #: src/transport/tcp_service_legacy.c:1397 -#: src/transport/transport-testing2.c:983 src/util/service.c:2072 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 #: src/util/service.c:2084 #, c-format msgid "Malformed configuration file `%s', exit ...\n" @@ -7882,7 +7912,7 @@ msgstr "" #: src/util/bio.c:359 #, c-format -msgid "String `%s' longer than allowed (%u > %u)" +msgid "String `%s' longer than allowed (%u > %lu)" msgstr "" #: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 @@ -8601,63 +8631,63 @@ msgstr "" msgid "Failed to expand `$HOME': environment variable `HOME' not set" msgstr "" -#: src/util/strings.c:1240 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "" -#: src/util/strings.c:1248 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1255 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1263 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "" -#: src/util/strings.c:1272 +#: src/util/strings.c:1273 #, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "" -#: src/util/strings.c:1499 src/util/strings.c:1510 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "" -#: src/util/strings.c:1519 +#: src/util/strings.c:1520 #, c-format msgid "Malformed port policy `%s'\n" msgstr "" -#: src/util/strings.c:1602 src/util/strings.c:1631 src/util/strings.c:1678 -#: src/util/strings.c:1698 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "" -#: src/util/strings.c:1656 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "" -#: src/util/strings.c:1707 +#: src/util/strings.c:1708 #, c-format msgid "Invalid format: `%s'\n" msgstr "" -#: src/util/strings.c:1760 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "" -#: src/util/strings.c:1810 +#: src/util/strings.c:1811 #, c-format msgid "Wrong format `%s' for netmask\n" msgstr "" -#: src/util/strings.c:1841 +#: src/util/strings.c:1842 #, c-format msgid "Wrong format `%s' for network\n" msgstr "" @@ -8841,8 +8871,8 @@ msgstr "" msgid "Setup tunnels via VPN." msgstr "" -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:420 -#: src/zonemaster/gnunet-service-zonemaster.c:849 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 msgid "Failed to connect to the namestore!\n" msgstr "" @@ -8886,11 +8916,6 @@ msgstr "" #~ msgid "Benchmarking done\n" #~ msgstr "Benchmark completato\n" -#, fuzzy -#~| msgid "Failed to create statistics!\n" -#~ msgid "Failed to connect peer 0 and %u\n" -#~ msgstr "Generazione statistiche fallita\n" - #~ msgid "Peer `%s'\n" #~ msgstr "Peer `%s'\n" diff --git a/po/sr.po b/po/sr.po index 981dc1d8e..2412637bd 100644 --- a/po/sr.po +++ b/po/sr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gnunet-0.10.1\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2014-04-08 11:11+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2020-10-23 18:39+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" @@ -14,670 +14,910 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: src/arm/arm_api.c:337 -msgid "Client was disconnected from arm service, trying to reconnect.\n" -msgstr "Клијент је ископчан са аур услуге, покушавам поново да се повежем.\n" +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 +#, c-format +msgid "Ego `%s' not known to identity service\n" +msgstr "Его „%s“ није познат услузи идентитета\n" + +#: src/abd/gnunet-abd.c:413 src/abd/gnunet-abd.c:901 +#, fuzzy, c-format +msgid "Issuer public key `%s' is not well-formed\n" +msgstr "Јавни кључ „%s“ није добро оформљен\n" + +#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 +#: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 +#, c-format +msgid "Failed to connect to namestore\n" +msgstr "Нисам успео да се повежем са смештајем назива\n" + +#: src/abd/gnunet-abd.c:840 src/abd/gnunet-abd.c:891 +#, fuzzy, c-format +msgid "Issuer public key not well-formed\n" +msgstr "Јавни кључ „%s“ није добро оформљен\n" + +#: src/abd/gnunet-abd.c:849 src/abd/gnunet-abd.c:910 +#, fuzzy, c-format +msgid "Failed to connect to ABD\n" +msgstr "Нисам успео да се повежем са ГНС-ом\n" + +#: src/abd/gnunet-abd.c:855 +#, c-format +msgid "You must provide issuer the attribute\n" +msgstr "" + +#: src/abd/gnunet-abd.c:862 +#, fuzzy, c-format +msgid "ego required\n" +msgstr "Потребна је исправна врста\n" + +#: src/abd/gnunet-abd.c:872 +#, c-format +msgid "Subject public key needed\n" +msgstr "" + +#: src/abd/gnunet-abd.c:881 +#, fuzzy, c-format +msgid "Subject public key `%s' is not well-formed\n" +msgstr "Јавни кључ „%s“ није добро оформљен\n" + +#: src/abd/gnunet-abd.c:916 +#, c-format +msgid "You must provide issuer and subject attributes\n" +msgstr "" + +#: src/abd/gnunet-abd.c:975 +#, fuzzy, c-format +msgid "Please specify name to lookup, subject key and issuer key!\n" +msgstr "Наведите назив за тражење!\n" + +#: src/abd/gnunet-abd.c:996 +msgid "verify credential against attribute" +msgstr "" + +#: src/abd/gnunet-abd.c:1003 +msgid "" +"The public key of the subject to lookup thecredential for, or for issuer " +"side storage: subject and its attributes" +msgstr "" + +#: src/abd/gnunet-abd.c:1010 +msgid "The private, signed delegate presented by the subject" +msgstr "" + +#: src/abd/gnunet-abd.c:1017 +#, fuzzy +msgid "The public key of the authority to verify the credential against" +msgstr "Наводи јавни кључ зоне у којој ће се тражити запис" + +#: src/abd/gnunet-abd.c:1022 +msgid "The ego/zone name to use" +msgstr "" + +#: src/abd/gnunet-abd.c:1028 +msgid "The issuer attribute to verify against or to issue" +msgstr "" + +#: src/abd/gnunet-abd.c:1034 +msgid "" +"The time to live for the credential.e.g. 5m, 6h, \"1990-12-30 12:00:00\"" +msgstr "" + +#: src/abd/gnunet-abd.c:1039 +msgid "collect credentials" +msgstr "" + +#: src/abd/gnunet-abd.c:1044 +msgid "Create and issue a credential issuer side." +msgstr "" + +#: src/abd/gnunet-abd.c:1049 +msgid "Issue a credential subject side." +msgstr "" + +#: src/abd/gnunet-abd.c:1054 +msgid "Create, sign and return a credential subject side." +msgstr "" + +#: src/abd/gnunet-abd.c:1061 +msgid "Import signed credentials that should be issued to a zone/ego" +msgstr "" + +#: src/abd/gnunet-abd.c:1065 +msgid "Create private record entry." +msgstr "" + +#: src/abd/gnunet-abd.c:1071 src/abd/gnunet-abd.c:1077 +msgid "Indicates that the collect/verify process is done via forward search." +msgstr "" + +#: src/abd/gnunet-abd.c:1090 +#, fuzzy +msgid "GNUnet abd resolver tool" +msgstr "Алат ГНУнет ГНС решавача" + +#: src/abd/gnunet-service-abd.c:1742 src/gns/gnunet-gns.c:292 +#, c-format +msgid "Failed to connect to GNS\n" +msgstr "Нисам успео да се повежем са ГНС-ом\n" -#: src/arm/arm_monitor_api.c:321 -msgid "Monitoring client was disconnected from arm service, trying to reconnect.\n" -msgstr "Клијент праћења је ископчан са аур услуге, покушавам поново да се повежем.\n" +#: src/abd/plugin_gnsrecord_abd.c:182 +#, fuzzy, c-format +msgid "Unable to parse ATTR record string `%s'\n" +msgstr "Не могу да обрадим ниску ТЛСА записа „%s“\n" -#: src/arm/gnunet-arm.c:164 +#: src/arm/gnunet-arm.c:162 #, c-format msgid "Failed to remove configuration file %s\n" msgstr "Нисам успео да уклоним датотеку подешавања „%s“\n" -#: src/arm/gnunet-arm.c:170 +#: src/arm/gnunet-arm.c:168 #, c-format msgid "Failed to remove servicehome directory %s\n" msgstr "Нисам успео да уклоним матични директоријум услуге „%s“\n" -#: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:1013 +#: src/arm/gnunet-arm.c:229 src/testbed/gnunet-service-testbed_peers.c:1144 msgid "Message was sent successfully" msgstr "Порука је успешно послата" -#: src/arm/gnunet-arm.c:218 -msgid "Misconfiguration (can not connect to the ARM service)" -msgstr "Лоше подешавање (не могу да се повежем на АУР услугу)" - -#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1017 +#: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:1147 msgid "We disconnected from ARM before we could send a request" msgstr "Прекинута је веза са АУР-ом пре него ли можемо послати захтев" -#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1019 -msgid "ARM API is busy" -msgstr "АУР АПИ је заузет" - -#: src/arm/gnunet-arm.c:224 -msgid "Request does not fit into a message" -msgstr "Захтев не стаје у поруку" - -#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1023 -msgid "Request timed out" -msgstr "Истекло је време захтева" - -#: src/arm/gnunet-arm.c:228 src/testbed/gnunet-service-testbed_peers.c:1025 +#: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:1149 msgid "Unknown request status" msgstr "Стање захтева је непознато" -#: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:1041 -#, c-format -msgid "%s is stopped" +#: src/arm/gnunet-arm.c:250 +#, fuzzy +msgid "is stopped" msgstr "„%s“ је заустављен" -#: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:1043 -#, c-format -msgid "%s is starting" +#: src/arm/gnunet-arm.c:253 +#, fuzzy +msgid "is starting" msgstr "„%s“ се покреће" -#: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:1045 -#, c-format -msgid "%s is stopping" +#: src/arm/gnunet-arm.c:256 +#, fuzzy +msgid "is stopping" msgstr "„%s“ се зауставља" -#: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:1047 -#, c-format -msgid "%s is starting already" +#: src/arm/gnunet-arm.c:259 +#, fuzzy +msgid "is starting already" msgstr "„%s“ се већ покреће" -#: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:1049 -#, c-format -msgid "%s is stopping already" +#: src/arm/gnunet-arm.c:262 +#, fuzzy +msgid "is stopping already" msgstr "„%s“ се већ зауставља" -#: src/arm/gnunet-arm.c:254 src/testbed/gnunet-service-testbed_peers.c:1051 -#, c-format -msgid "%s is started already" +#: src/arm/gnunet-arm.c:265 +#, fuzzy +msgid "is started already" msgstr "„%s“ је већ покренут" -#: src/arm/gnunet-arm.c:256 src/testbed/gnunet-service-testbed_peers.c:1053 -#, c-format -msgid "%s is stopped already" +#: src/arm/gnunet-arm.c:268 +#, fuzzy +msgid "is stopped already" msgstr "„%s“ је већ заустављен" -#: src/arm/gnunet-arm.c:258 src/testbed/gnunet-service-testbed_peers.c:1055 -#, c-format -msgid "%s service is not known to ARM" +#: src/arm/gnunet-arm.c:271 +#, fuzzy +msgid "service is not known to ARM" msgstr "„%s“ услуга није позната АУР-у" -#: src/arm/gnunet-arm.c:260 src/testbed/gnunet-service-testbed_peers.c:1057 -#, c-format -msgid "%s service failed to start" +#: src/arm/gnunet-arm.c:274 +#, fuzzy +msgid "service failed to start" msgstr "„%s“ услуга није успела да се покрене" -#: src/arm/gnunet-arm.c:262 -#, c-format -msgid "%s service cannot be started because ARM is shutting down" +#: src/arm/gnunet-arm.c:277 +#, fuzzy +msgid "service cannot be manipulated because ARM is shutting down" msgstr "„%s“ услуга се не може покренути јер се АУР гаси" -#: src/arm/gnunet-arm.c:264 src/testbed/gnunet-service-testbed_peers.c:1061 -#, c-format -msgid "%.s Unknown result code." +#: src/arm/gnunet-arm.c:279 +#, fuzzy +msgid "Unknown result code." msgstr "%.s Непознат код резултата." -#: src/arm/gnunet-arm.c:297 +#: src/arm/gnunet-arm.c:312 msgid "Fatal error initializing ARM API.\n" msgstr "Кобна грешка покретања АУР АПИ-ја.\n" -#: src/arm/gnunet-arm.c:326 src/arm/gnunet-arm.c:335 +#: src/arm/gnunet-arm.c:341 src/arm/gnunet-arm.c:350 #, c-format msgid "Failed to start the ARM service: %s\n" msgstr "Нисам успео да покренем АУР услугу: %s\n" -#: src/arm/gnunet-arm.c:369 +#: src/arm/gnunet-arm.c:388 #, c-format msgid "Failed to send a stop request to the ARM service: %s\n" msgstr "Нисам успео да пошаљем захтев за заустављање АУР услузи: %s\n" -#: src/arm/gnunet-arm.c:379 +#: src/arm/gnunet-arm.c:399 #, c-format msgid "Failed to stop the ARM service: %s\n" msgstr "Нисам успео да зауставим АУР услугу: %s\n" -#: src/arm/gnunet-arm.c:421 -#, c-format -msgid "Failed to send a request to start the `%s' service: %%s\n" +#: src/arm/gnunet-arm.c:440 +#, fuzzy, c-format +msgid "Failed to send a request to start the `%s' service: %s\n" msgstr "Нисам успео да пошаљем захтев за покретање „%s“ услузи: %%s\n" -#: src/arm/gnunet-arm.c:431 +#: src/arm/gnunet-arm.c:450 #, c-format msgid "Failed to start the `%s' service: %s\n" msgstr "Нисам успео да покренем „%s“ услугу: %s\n" -#: src/arm/gnunet-arm.c:468 +#: src/arm/gnunet-arm.c:490 #, c-format msgid "Failed to send a request to kill the `%s' service: %%s\n" msgstr "Нисам успео да пошаљем захтев за убијање „%s“ услуге: %%s\n" -#: src/arm/gnunet-arm.c:479 +#: src/arm/gnunet-arm.c:503 #, c-format msgid "Failed to kill the `%s' service: %s\n" msgstr "Нисам успео да убијем „%s“ услугу: %s\n" -#: src/arm/gnunet-arm.c:517 +#: src/arm/gnunet-arm.c:549 #, c-format msgid "Failed to request a list of services: %s\n" msgstr "Нисам успео да захтевам списак услуга: %s\n" -#: src/arm/gnunet-arm.c:525 +#: src/arm/gnunet-arm.c:561 msgid "Error communicating with ARM. ARM not running?\n" msgstr "Грешка у комуникацији са АУР-ом. Да ли је АУР покренут?\n" -#: src/arm/gnunet-arm.c:530 -msgid "Running services:\n" +#: src/arm/gnunet-arm.c:603 +#, fuzzy +msgid "All services:\n" msgstr "Покренуте услуге:\n" -#: src/arm/gnunet-arm.c:612 +#: src/arm/gnunet-arm.c:607 +msgid "Services (excluding stopped services):\n" +msgstr "" + +#: src/arm/gnunet-arm.c:664 +#, fuzzy +msgid "(No services configured.)\n" +msgstr "Кључна услуга „%4s“ је спремна.\n" + +#: src/arm/gnunet-arm.c:825 #, c-format msgid "Now only monitoring, press CTRL-C to stop.\n" msgstr "Сада пратим само, притисните КТРЛ-Ц да зауставите.\n" -#: src/arm/gnunet-arm.c:643 +#: src/arm/gnunet-arm.c:861 #, c-format msgid "Stopped %s.\n" msgstr "Заустављен%s.\n" -#: src/arm/gnunet-arm.c:646 +#: src/arm/gnunet-arm.c:865 #, c-format msgid "Starting %s...\n" msgstr "Покрећем %s...\n" -#: src/arm/gnunet-arm.c:649 +#: src/arm/gnunet-arm.c:869 #, c-format msgid "Stopping %s...\n" msgstr "Заустављам %s...\n" -#: src/arm/gnunet-arm.c:660 +#: src/arm/gnunet-arm.c:884 #, c-format msgid "Unknown status %u for service %s.\n" msgstr "Непознато стање %u за услугу „%s“.\n" -#: src/arm/gnunet-arm.c:724 +#: src/arm/gnunet-arm.c:974 msgid "stop all GNUnet services" msgstr "зауставља све ГНУнет услуге" -#: src/arm/gnunet-arm.c:726 +#: src/arm/gnunet-arm.c:979 msgid "start a particular service" msgstr "покреће нарочиту услугу" -#: src/arm/gnunet-arm.c:728 +#: src/arm/gnunet-arm.c:984 msgid "stop a particular service" msgstr "зауставља нарочиту услугу" -#: src/arm/gnunet-arm.c:730 +#: src/arm/gnunet-arm.c:989 +msgid "also show stopped services (used with -I)" +msgstr "" + +#: src/arm/gnunet-arm.c:994 msgid "start all GNUnet default services" msgstr "покреће све основне ГНУнет услуге" -#: src/arm/gnunet-arm.c:733 +#: src/arm/gnunet-arm.c:999 msgid "stop and start all GNUnet default services" msgstr "зауставља и покреће све основне ГНУнет услуге" -#: src/arm/gnunet-arm.c:736 +#: src/arm/gnunet-arm.c:1004 msgid "delete config file and directory on exit" msgstr "брише датотеку подешавања и директоријум на изласку" -#: src/arm/gnunet-arm.c:739 +#: src/arm/gnunet-arm.c:1008 msgid "monitor ARM activities" msgstr "прати активности АУР-а" -#: src/arm/gnunet-arm.c:741 +#: src/arm/gnunet-arm.c:1012 msgid "don't print status messages" msgstr "не исписује поруке стања" -#: src/arm/gnunet-arm.c:744 -msgid "timeout in MSECS milliseconds for completing current operation" -msgstr "време истека у МСЕК милисекундама за завршавање текуће радње" +#: src/arm/gnunet-arm.c:1019 +msgid "exit with error status if operation does not finish after DELAY" +msgstr "" -#: src/arm/gnunet-arm.c:746 +#: src/arm/gnunet-arm.c:1024 msgid "list currently running services" msgstr "исписује тренутно покренуте услуге" -#: src/arm/gnunet-arm.c:748 +#: src/arm/gnunet-arm.c:1029 msgid "don't let gnunet-service-arm inherit standard output" msgstr "не да да „gnunet-service-arm“ наследи стандардни излаз" -#: src/arm/gnunet-arm.c:750 +#: src/arm/gnunet-arm.c:1034 msgid "don't let gnunet-service-arm inherit standard error" msgstr "не да да „gnunet-service-arm“ наследи стандардну грешку" -#: src/arm/gnunet-arm.c:761 +#: src/arm/gnunet-arm.c:1052 msgid "Control services and the Automated Restart Manager (ARM)" msgstr "Контролне услуге и Аутоматизовани Управник Рестарта (АУР)" -#: src/arm/gnunet-service-arm.c:266 -msgid "Could not send status result to client\n" -msgstr "Не могу да пошаљем резултат стања клијенту\n" +#: src/arm/gnunet-service-arm.c:391 src/transport/plugin_transport_tcp.c:1102 +#: src/transport/tcp_service_legacy.c:573 +#, c-format +msgid "" +"Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n" +msgstr "" +"Искључујем ИПв6 подршку за услугу „%s“, нисм успео да направим ИПв6 " +"прикључницу: %s\n" + +#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418 +#: src/transport/plugin_transport_tcp.c:1123 +#: src/transport/plugin_transport_tcp.c:1129 +#: src/transport/plugin_transport_tcp.c:3706 +#: src/transport/tcp_service_legacy.c:594 +#: src/transport/tcp_service_legacy.c:600 src/util/service.c:1090 +#: src/util/service.c:1096 +#, c-format +msgid "Require valid port number for service `%s' in configuration!\n" +msgstr "Захтева исправан број прикључника за услугу „%s“ у подешавањима!\n" + +#: src/arm/gnunet-service-arm.c:452 src/transport/plugin_transport_tcp.c:1163 +#: src/transport/tcp_service_legacy.c:634 src/util/client.c:527 +#: src/util/service.c:1129 +#, c-format +msgid "UNIXPATH `%s' too long, maximum length is %llu\n" +msgstr "ЈУНИКС_ПУТАЊА „%s“ је предуга, највећа дужина је %llu\n" + +#: src/arm/gnunet-service-arm.c:456 src/transport/plugin_transport_tcp.c:1167 +#: src/transport/tcp_service_legacy.c:638 src/util/client.c:532 +#: src/util/service.c:1133 +#, c-format +msgid "Using `%s' instead\n" +msgstr "Користим зато „%s“\n" + +#: src/arm/gnunet-service-arm.c:484 src/transport/plugin_transport_tcp.c:1195 +#: src/transport/tcp_service_legacy.c:666 src/util/service.c:1153 +#, c-format +msgid "" +"Disabling UNIX domain socket support for service `%s', failed to create UNIX " +"domain socket: %s\n" +msgstr "" +"Искључујем подршку прикључнице ЈУНИКС домена за услугу „%s“, нисм успео да " +"направим прикључницу ЈУНИКС домена: %s\n" + +#: src/arm/gnunet-service-arm.c:505 src/transport/plugin_transport_tcp.c:1213 +#: src/transport/tcp_service_legacy.c:684 src/util/service.c:1171 +#, c-format +msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n" +msgstr "" +"Немам ни ПРИКЉУЧНИК ни ЈУНИКС_ПУТАЊУ за услугу „%s“, али је једно потребно\n" + +#: src/arm/gnunet-service-arm.c:536 +#: src/transport/plugin_transport_http_server.c:2718 +#: src/transport/plugin_transport_tcp.c:1244 +#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1202 +#, c-format +msgid "Failed to resolve `%s': %s\n" +msgstr "Нисам успео да решим „%s“: %s\n" -#: src/arm/gnunet-service-arm.c:302 -msgid "Could not send list result to client\n" -msgstr "Не могу да пошаљем резултат списка клијенту\n" +#: src/arm/gnunet-service-arm.c:555 +#: src/transport/plugin_transport_http_server.c:2736 +#: src/transport/plugin_transport_tcp.c:1263 +#: src/transport/tcp_service_legacy.c:734 src/util/service.c:1221 +#, c-format +msgid "Failed to find %saddress for `%s'.\n" +msgstr "Нисам успео да нађем %s адресу за „%s“.\n" -#: src/arm/gnunet-service-arm.c:529 +#: src/arm/gnunet-service-arm.c:951 #, c-format msgid "Failed to start service `%s'\n" msgstr "Нисам успео да покренем услугу „%s“\n" -#: src/arm/gnunet-service-arm.c:540 +#: src/arm/gnunet-service-arm.c:962 #, c-format msgid "Starting service `%s'\n" msgstr "Покрећем услугу „%s“\n" -#: src/arm/gnunet-service-arm.c:639 +#: src/arm/gnunet-service-arm.c:1062 #, c-format msgid "Unable to create socket for service `%s': %s\n" msgstr "Не могу да направим прикључницу за услугу „%s“: %s\n" -#: src/arm/gnunet-service-arm.c:661 +#: src/arm/gnunet-service-arm.c:1093 #, c-format msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n" -msgstr "Не могу да увежем прикључницу ослушкивања за услугу „%s“ на адресу „%s“: %s\n" +msgstr "" +"Не могу да увежем прикључницу ослушкивања за услугу „%s“ на адресу „%s“: %s\n" -#: src/arm/gnunet-service-arm.c:695 +#: src/arm/gnunet-service-arm.c:1124 #, c-format msgid "ARM now monitors connections to service `%s' at `%s'\n" msgstr "АУР сада надгледа везе ка услузи „%s“ на „%s“\n" -#: src/arm/gnunet-service-arm.c:831 +#: src/arm/gnunet-service-arm.c:1272 #, c-format msgid "Preparing to stop `%s'\n" msgstr "Припремам се да зауставим „%s“\n" -#: src/arm/gnunet-service-arm.c:1100 +#: src/arm/gnunet-service-arm.c:1604 #, c-format msgid "Restarting service `%s'.\n" msgstr "Поново покрећем услугу „%s“.\n" -#: src/arm/gnunet-service-arm.c:1193 +#: src/arm/gnunet-service-arm.c:1755 msgid "exit" msgstr "излази" -#: src/arm/gnunet-service-arm.c:1198 +#: src/arm/gnunet-service-arm.c:1760 msgid "signal" msgstr "сигнал" -#: src/arm/gnunet-service-arm.c:1203 +#: src/arm/gnunet-service-arm.c:1765 msgid "unknown" msgstr "непознато" -#: src/arm/gnunet-service-arm.c:1209 +#: src/arm/gnunet-service-arm.c:1771 #, c-format msgid "Service `%s' took %s to terminate\n" msgstr "Услуга „%s“ је узела %s да оконча\n" -#: src/arm/gnunet-service-arm.c:1231 +#: src/arm/gnunet-service-arm.c:1798 #, c-format msgid "Service `%s' terminated normally, will restart at any time\n" -msgstr "Услуга „%s“ је окончана нормално, поново ће се покренути у било које време\n" +msgstr "" +"Услуга „%s“ је окончана нормално, поново ће се покренути у било које време\n" -#: src/arm/gnunet-service-arm.c:1246 +#: src/arm/gnunet-service-arm.c:1815 #, c-format msgid "Service `%s' terminated with status %s/%d, will restart in %s\n" -msgstr "Услуга „%s“ је окончана са стањем %s/%d, поново ће се покренути за %s\n" - -#: src/arm/gnunet-service-arm.c:1500 -#, c-format -msgid "Starting default services `%s'\n" -msgstr "Покрећем основне услуге „%s“\n" - -#: src/arm/gnunet-service-arm.c:1511 -#, c-format -msgid "Default service `%s' not configured correctly!\n" -msgstr "Основна услуга „%s“ није подешена исправно!\n" - -#: src/arm/gnunet-service-arm.c:1524 -msgid "No default services configured, GNUnet will not really start right now.\n" -msgstr "Основне услуге нису подешене, ГНУнет се неће баш сада покренути.\n" +msgstr "" +"Услуга „%s“ је окончана са стањем %s/%d, поново ће се покренути за %s\n" -#: src/arm/mockup-service.c:41 +#: src/arm/mockup-service.c:42 msgid "Initiating shutdown as requested by client.\n" msgstr "Започињем гашење као што је затражио клијент.\n" -#: src/ats/ats_api_performance.c:468 -#, c-format -msgid "Received %s message\n" -msgstr "Примих %s поруку\n" - -#: src/ats/ats_api_performance.c:511 -#, c-format -msgid "Received last message for %s \n" -msgstr "Примих последњу поруку за %s \n" - -#: src/ats/gnunet-ats-solver-eval.c:2199 src/ats/gnunet-ats-solver-eval.c:2233 -#: src/ats/gnunet-service-ats_addresses.c:1980 -#: src/ats/gnunet-service-ats_addresses.c:2024 -#, c-format -msgid "Could not load quota for network `%s': `%s', assigning default bandwidth %llu\n" -msgstr "Не могу да учитам квоту за мрежу „%s“: „%s“, додељујем основни пропусни опсег %llu\n" - -#: src/ats/gnunet-ats-solver-eval.c:2205 -#: src/ats/gnunet-service-ats_addresses.c:1987 -#, c-format -msgid "Outbound quota configure for network `%s' is %llu\n" -msgstr "Квота одлазности подешена за мрежу „%s“ је %llu\n" - -#: src/ats/gnunet-ats-solver-eval.c:2212 -#: src/ats/gnunet-service-ats_addresses.c:1995 +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 #, c-format -msgid "No outbound quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "Нема подешене одлазне квоте за мрежу „%s“, додељујем основни пропусни опсег %llu\n" +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" +"Не могу да учитам квоту за мрежу „%s“: „%s“, додељујем основни пропусни " +"опсег %llu\n" -#: src/ats/gnunet-ats-solver-eval.c:2239 -#: src/ats/gnunet-service-ats_addresses.c:2031 +#: src/ats/gnunet-ats-solver-eval.c:3011 #, c-format -msgid "Inbound quota configured for network `%s' is %llu\n" -msgstr "Квота долазности подешена за мрежу „%s“ је %llu\n" +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" +"Нема подешене одлазне квоте за мрежу „%s“, додељујем основни пропусни опсег " +"%llu\n" -#: src/ats/gnunet-ats-solver-eval.c:2246 -#: src/ats/gnunet-service-ats_addresses.c:2039 +#: src/ats/gnunet-ats-solver-eval.c:3063 #, c-format -msgid "No outbound quota configure for network `%s', assigning default bandwidth %llu\n" -msgstr "Није подешена одлазна квота за мрежу „%s“, додељујем основни пропусни опсег %llu\n" +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" +"Није подешена одлазна квота за мрежу „%s“, додељујем основни пропусни опсег " +"%llu\n" -#: src/ats/gnunet-ats-solver-eval.c:2671 -#: src/ats-tests/gnunet-solver-eval.c:919 +#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997 msgid "solver to use" msgstr "решавач за коришћење" -#: src/ats/gnunet-ats-solver-eval.c:2674 src/ats/gnunet-ats-solver-eval.c:2677 -#: src/ats-tests/gnunet-solver-eval.c:922 -#: src/ats-tests/gnunet-solver-eval.c:925 +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 msgid "experiment to use" msgstr "експеримент за коришћење" -#: src/ats/gnunet-ats-solver-eval.c:2680 +#: src/ats/gnunet-ats-solver-eval.c:3564 msgid "print logging" msgstr "исписује дневничење" -#: src/ats/gnunet-service-ats_addresses.c:2217 -#, c-format -msgid "Initializing solver `%s '`%s'\n" -msgstr "Покрећем решавача „%s “„%s“\n" - -#: src/ats/gnunet-service-ats_addresses.c:2220 -#, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "Нисам успео да покренем решавача „%s“!\n" - -#: src/ats/gnunet-service-ats_addresses.c:2243 -msgid "Failed to initialize solver!\n" -msgstr "Нисам успео да покренем решавача!\n" - -#: src/ats/plugin_ats_mlp.c:892 -msgid "Problem size too large, cannot allocate memory!\n" -msgstr "Величина проблема је превелика, не могу да доделим меморију!\n" - -#: src/ats/plugin_ats_mlp.c:1329 -#, c-format -msgid "Adding address for peer `%s' multiple times\n" -msgstr "Додајем адресу за парњака „%s“ више пута\n" - -#: src/ats/plugin_ats_mlp.c:1376 -#, c-format -msgid "Updating address property `%s' for peer `%s' %p not added before\n" -msgstr "Освежавам својство адресе „%s“ за парњака „%s“ %p који није додат раније\n" - -#: src/ats/plugin_ats_mlp.c:2122 -#, c-format -msgid "Adjusting inconsistent outbound quota configuration for network `%s', is %llu must be at least %llu\n" -msgstr "Поправљам недоследно подешавање одлазне квоте за мрежу „%s“, која је %llu а мора бити најмање %llu\n" +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "" -#: src/ats/plugin_ats_mlp.c:2131 -#, c-format -msgid "Adjusting inconsistent inbound quota configuration for network `%s', is %llu must be at least %llu\n" -msgstr "Поправљам недоследно подешавање долазне квоте за мрежу „%s“, која је %llu а мора бити најмање %llu\n" +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "" -#: src/ats/plugin_ats_mlp.c:2142 -#, c-format -msgid "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n" -msgstr "Поправљам недоследно подешавање одлазне квоте за мрежу „%s“ са %llu на %.0f\n" +#: src/ats/gnunet-service-ats_plugins.c:326 +#, fuzzy, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" +"Не могу да учитам квоту за мрежу „%s“: „%s“, додељујем основни пропусни " +"опсег %llu\n" -#: src/ats/plugin_ats_mlp.c:2150 -#, c-format -msgid "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n" -msgstr "Поправљам недоследно подешавање долазне квоте за мрежу „%s“ са %llu на %.0f\n" +#: src/ats/gnunet-service-ats_plugins.c:336 +#, fuzzy, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "Квота долазности подешена за мрежу „%s“ је %llu\n" -#: src/ats/plugin_ats_mlp.c:2161 -#, c-format -msgid "Using default quota configuration for network `%s' (in/out) %llu/%llu\n" -msgstr "Користим основно подешавање квоте за мрежу „%s“ (улаз/излаз) %llu/%llu\n" +#: src/ats/gnunet-service-ats_plugins.c:382 +#, fuzzy, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" +"Нема подешене одлазне квоте за мрежу „%s“, додељујем основни пропусни опсег " +"%llu\n" -#: src/ats/plugin_ats_proportional.c:1511 +#: src/ats/gnunet-service-ats_plugins.c:474 #, c-format -msgid "Invalid network type `%u' `%s': Disconnect!\n" -msgstr "Неисправна врста мреже „%u“ „%s“: Прекидам везу!\n" +msgid "Failed to initialize solver `%s'!\n" +msgstr "Нисам успео да покренем решавача „%s“!\n" -#: src/ats-tests/ats-testing.c:72 -msgid "Benchmarking done\n" -msgstr "Оцењивање је готово\n" +#: src/ats/plugin_ats_proportional.c:1142 +#, fuzzy, c-format +msgid "Invalid %s configuration %f \n" +msgstr "Нисам успео да учитам подешавање за „%s“\n" -#: src/ats-tests/ats-testing.c:105 -#, c-format -msgid "Failed to connect peer 0 and %u\n" -msgstr "Нисам успео да повежем парњака 0 и %u\n" +#: src/ats/plugin_ats_proportional.c:1165 +#, fuzzy, c-format +msgid "Invalid %s configuration %f\n" +msgstr "Нађох пријатеља „%s“ у подешавањима\n" -#: src/ats-tests/ats-testing.c:413 +#: src/ats-tests/ats-testing.c:420 #, c-format msgid "Connected master [%u] with slave [%u]\n" msgstr "Повезан је надређени [%u] са потчињеним [%u]\n" -#: src/ats-tests/ats-testing.c:419 +#: src/ats-tests/ats-testing.c:427 #, c-format msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "Нисам успео да повежем надређеног парњака [%u] са потчињеним [%u]\n" -#: src/ats-tests/ats-testing.c:450 -msgid "Connecting peers on CORE level\n" -msgstr "Повезујем парњаке на „CORE“ нивоу\n" - -#: src/ats-tests/ats-testing.c:461 -#, c-format -msgid "Connecting master [%u] with slave [%u]\n" -msgstr "Повезујем надређеног [%u] са потчињеним [%u]\n" - -#: src/ats-tests/ats-testing.c:470 -#, c-format -msgid "Could not connect master [%u] and slave [%u]\n" -msgstr "Не могу да повежем надређеног [%u] и потчињеног [%u]\n" - -#: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:671 -msgid "Initialization failed, shutdown\n" -msgstr "Покретање није успело, гасим\n" - -#: src/ats-tests/ats-testing-log.c:842 +#: src/ats-tests/ats-testing-log.c:896 msgid "Stop logging\n" msgstr "Заустављам дневничење\n" -#: src/ats-tests/ats-testing-log.c:893 +#: src/ats-tests/ats-testing-log.c:952 #, c-format msgid "Start logging `%s'\n" msgstr "Започињем дневничење „%s“\n" -#: src/ats-tests/gnunet-ats-sim.c:86 +#: src/ats-tests/gnunet-ats-sim.c:92 #, c-format -msgid "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n" -msgstr "Надређени [%u]: послао: %u KiB за %u сек. = %u KiB/s, примио: %u KiB за %u сек. = %u KiB/s\n" +msgid "" +"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. " +"= %u KiB/s\n" +msgstr "" +"Надређени [%u]: послао: %u KiB за %u сек. = %u KiB/s, примио: %u KiB за %u " +"сек. = %u KiB/s\n" -#: src/ats-tool/gnunet-ats.c:169 +#: src/ats-tool/gnunet-ats.c:299 #, c-format msgid "%u address resolutions had a timeout\n" msgstr "%u адресна разрешења имаху време истека\n" -#: src/ats-tool/gnunet-ats.c:171 -#, c-format -msgid "ATS returned results for %u addresses\n" +#: src/ats-tool/gnunet-ats.c:302 +#, fuzzy, c-format +msgid "ATS returned stat_results for %u addresses\n" msgstr "АТС је вратио резултате за %u адресе\n" -#: src/ats-tool/gnunet-ats.c:232 +#: src/ats-tool/gnunet-ats.c:389 #, c-format -msgid "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/s, %s\n" -msgstr "Парњак „%s“ прикључак „%s“, адреса „%s“, „%s“ излазни пропусни опсег: %u Бајта/сек, улазни пропусни опсег %u Бајта/сек, %s\n" +msgid "" +"Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/" +"s, %s\n" +msgstr "" +"Парњак „%s“ прикључак „%s“, адреса „%s“, „%s“ излазни пропусни опсег: %u " +"Бајта/сек, улазни пропусни опсег %u Бајта/сек, %s\n" + +#: src/ats-tool/gnunet-ats.c:396 +msgid "active " +msgstr "" + +#: src/ats-tool/gnunet-ats.c:396 +msgid "inactive " +msgstr "" + +#: src/ats-tool/gnunet-ats.c:501 +#, fuzzy, c-format +msgid "Removed address of peer `%s' with plugin `%s'\n" +msgstr "Уклањам истеклу адресу преноса „%s“\n" -#: src/ats-tool/gnunet-ats.c:413 +#: src/ats-tool/gnunet-ats.c:692 #, c-format msgid "Quota for network `%11s' (in/out): %10s / %10s\n" msgstr "Квота за мрежу „%11s“ (улаз/излаз): %10s / %10s\n" -#: src/ats-tool/gnunet-ats.c:433 src/core/gnunet-core.c:163 -#: src/namestore/gnunet-namestore.c:550 src/transport/gnunet-transport.c:1246 -#, c-format -msgid "Service `%s' is not running\n" -msgstr "Услуга „%s“ није покренута\n" - -#: src/ats-tool/gnunet-ats.c:445 src/transport/gnunet-transport.c:1255 +#: src/ats-tool/gnunet-ats.c:734 src/ats-tool/gnunet-ats.c:745 #, c-format msgid "Failed to parse peer identity `%s'\n" msgstr "Нисам успео да обрадим идентитет парњака „%s“\n" -#: src/ats-tool/gnunet-ats.c:454 -#, c-format -msgid "Please select one operation : %s or %s or %s or %s or %s\n" +#: src/ats-tool/gnunet-ats.c:756 +#, fuzzy, c-format +msgid "Please select one operation: %s or %s or %s or %s or %s\n" msgstr "Изаберите једну радњу : „%s“ или „%s“ или „%s“ или „%s“ или „%s“\n" -#: src/ats-tool/gnunet-ats.c:470 src/ats-tool/gnunet-ats.c:489 -#: src/ats-tool/gnunet-ats.c:506 src/ats-tool/gnunet-ats.c:543 -#, c-format +#: src/ats-tool/gnunet-ats.c:776 src/ats-tool/gnunet-ats.c:800 +#: src/ats-tool/gnunet-ats.c:825 src/ats-tool/gnunet-ats.c:862 msgid "Cannot connect to ATS service, exiting...\n" msgstr "Не могу да се повежем са АТС услугом, излазим...\n" -#: src/ats-tool/gnunet-ats.c:478 src/ats-tool/gnunet-ats.c:495 -#, c-format +#: src/ats-tool/gnunet-ats.c:789 src/ats-tool/gnunet-ats.c:812 msgid "Cannot issue request to ATS service, exiting...\n" msgstr "Не могу да издам захтев АТС услузи, одлазим...\n" -#: src/ats-tool/gnunet-ats.c:515 -#, c-format +#: src/ats-tool/gnunet-ats.c:834 msgid "No preference type given!\n" msgstr "Није дата врста својства!\n" -#: src/ats-tool/gnunet-ats.c:520 -#, c-format +#: src/ats-tool/gnunet-ats.c:839 msgid "No peer given!\n" msgstr "Није дат парњак!\n" -#: src/ats-tool/gnunet-ats.c:536 +#: src/ats-tool/gnunet-ats.c:855 msgid "Valid type required\n" msgstr "Потребна је исправна врста\n" -#: src/ats-tool/gnunet-ats.c:594 +#: src/ats-tool/gnunet-ats.c:911 msgid "get list of active addresses currently used" msgstr "добавља списак активних адреса које се тренутно користе" -#: src/ats-tool/gnunet-ats.c:596 +#: src/ats-tool/gnunet-ats.c:916 msgid "get list of all active addresses" msgstr "добавља списак свих активних адреса" -#: src/ats-tool/gnunet-ats.c:599 +#: src/ats-tool/gnunet-ats.c:922 +#, fuzzy +msgid "connect to PEER" +msgstr "повезује се са парњаком" + +#: src/ats-tool/gnunet-ats.c:927 msgid "do not resolve IP addresses to hostnames" msgstr "не решава ИП адресе за називе домаћине" -#: src/ats-tool/gnunet-ats.c:601 +#: src/ats-tool/gnunet-ats.c:932 msgid "monitor mode" msgstr "режим праћења" -#: src/ats-tool/gnunet-ats.c:603 +#: src/ats-tool/gnunet-ats.c:938 msgid "set preference for the given peer" msgstr "поставља својство за датог парњака" -#: src/ats-tool/gnunet-ats.c:605 +#: src/ats-tool/gnunet-ats.c:943 msgid "print all configured quotas" msgstr "исписује све подешене квоте" -#: src/ats-tool/gnunet-ats.c:607 +#: src/ats-tool/gnunet-ats.c:948 msgid "peer id" msgstr "иб парњака" -#: src/ats-tool/gnunet-ats.c:610 +#: src/ats-tool/gnunet-ats.c:955 msgid "preference type to set: latency | bandwidth" msgstr "врста поставке за постављање: кашњење | пропусни опсег" -#: src/ats-tool/gnunet-ats.c:612 +#: src/ats-tool/gnunet-ats.c:961 msgid "preference value" msgstr "вредност својства" -#: src/ats-tool/gnunet-ats.c:615 +#: src/ats-tool/gnunet-ats.c:967 msgid "verbose output (include ATS address properties)" msgstr "опширан излаз (укључује својства АТС адресе)" -#: src/ats-tool/gnunet-ats.c:622 +#: src/ats-tool/gnunet-ats.c:977 msgid "Print information about ATS state" msgstr "Исписује податке о АТС стању" -#: src/consensus/gnunet-consensus-profiler.c:437 -#: src/secretsharing/gnunet-secretsharing-profiler.c:535 -msgid "number of peers in consensus" -msgstr "број парњака у концензусу" - -#: src/consensus/gnunet-consensus-profiler.c:440 -msgid "how many peers receive one value?" -msgstr "колико парњака прима једну вредност?" +#: src/auction/gnunet-auction-create.c:163 +msgid "description of the item to be sold" +msgstr "" -#: src/consensus/gnunet-consensus-profiler.c:443 -#: src/set/gnunet-set-profiler.c:286 src/set/gnunet-set-profiler.c:289 -#: src/set/gnunet-set-profiler.c:292 -msgid "number of values" -msgstr "број вредности" +#: src/auction/gnunet-auction-create.c:169 +msgid "mapping of possible prices" +msgstr "" -#: src/consensus/gnunet-consensus-profiler.c:446 -msgid "consensus timeout" -msgstr "време истека концензуса" +#: src/auction/gnunet-auction-create.c:175 +msgid "max duration per round" +msgstr "" -#: src/consensus/gnunet-consensus-profiler.c:449 -msgid "delay until consensus starts" +#: src/auction/gnunet-auction-create.c:182 +#, fuzzy +msgid "duration until auction starts" msgstr "застој док не започне концензус" -#: src/consensus/gnunet-consensus-profiler.c:452 -#: src/secretsharing/gnunet-secretsharing-profiler.c:550 -msgid "be more verbose (print received values)" -msgstr "бива опширнији (исписује примљене вредности)" +#: src/auction/gnunet-auction-create.c:187 +msgid "" +"number of items to sell\n" +"0 for first price auction\n" +">0 for vickrey/M+1st price auction" +msgstr "" -#: src/conversation/conversation_api.c:557 -#: src/conversation/conversation_api_call.c:470 -msgid "Connection to conversation service lost, trying to reconnect\n" -msgstr "Веза са услугом конверзације је изгубљена, покушавам поново да се повежем\n" +#: src/auction/gnunet-auction-create.c:194 +msgid "public auction outcome" +msgstr "" -#: src/conversation/gnunet-conversation.c:264 -#, c-format -msgid "Incoming call from `%s'. Please /accept #%u or /cancel %u the call.\n" -msgstr "Долазни позив од „%s“. /прихватите #%u или /откажите %u позив.\n" +#: src/auction/gnunet-auction-create.c:200 +msgid "keep running in foreground until auction completes" +msgstr "" -#: src/conversation/gnunet-conversation.c:286 -#, c-format -msgid "Call from `%s' terminated\n" -msgstr "Позив од „%s“ је окончан\n" +#: src/auction/gnunet-auction-create.c:212 +msgid "create a new auction and start listening for bidders" +msgstr "" -#: src/conversation/gnunet-conversation.c:319 -#, c-format -msgid "Call from `%s' suspended by other user\n" -msgstr "Позив од „%s“ је обуставио други корисник\n" +#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 +#: src/conversation/gnunet-conversation-test.c:256 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 +msgid "help text" +msgstr "текст помоћи" -#: src/conversation/gnunet-conversation.c:324 +#: src/cadet/gnunet-cadet.c:606 #, c-format -msgid "Call from `%s' resumed by other user\n" -msgstr "Позив од „%s“ је повратио други корисник\n" +msgid "Invalid peer ID `%s'\n" +msgstr "Неисправан ИБ парњака „%s“\n" -#: src/conversation/gnunet-conversation.c:342 +#: src/cadet/gnunet-cadet.c:685 #, c-format -msgid "Ego `%s' no longer available, phone is now down.\n" -msgstr "Его „%s“ није више доступан, телефон је сада искључен.\n" - -#: src/conversation/gnunet-conversation.c:356 -msgid "Failed to setup phone (internal error)\n" -msgstr "Нисам успео да подесим телефон (унутрашња грешка)\n" +msgid "Extra arguments are not applicable in combination with this option.\n" +msgstr "" -#: src/conversation/gnunet-conversation.c:368 +#: src/cadet/gnunet-cadet.c:746 #, c-format -msgid "Phone active on line %u. Type `/help' for a list of available commands\n" -msgstr "Телефон је активан на линији %u. Упишите „/help“ за списак доступних наредби\n" +msgid "Invalid target `%s'\n" +msgstr "Неисправна мета „%s“\n" -#: src/conversation/gnunet-conversation.c:390 -#, c-format +#: src/cadet/gnunet-cadet.c:775 +msgid "No action requested\n" +msgstr "" + +#: src/cadet/gnunet-cadet.c:800 +#, fuzzy +msgid "Provide information about a particular connection" +msgstr "обезбеђује податке о нарочитој вези" + +#: src/cadet/gnunet-cadet.c:804 +#, fuzzy +msgid "Activate echo mode" +msgstr "покреће режим ехоа" + +#: src/cadet/gnunet-cadet.c:811 +msgid "Listen for connections using a shared secret among sender and recipient" +msgstr "" + +#: src/cadet/gnunet-cadet.c:817 +#, fuzzy +msgid "Provide information about a patricular peer" +msgstr "обезбеђује податке о нарочитом тунелу" + +#: src/cadet/gnunet-cadet.c:822 +#, fuzzy +msgid "Provide information about all peers" +msgstr "обезбеђује податке о свим парњацима" + +#: src/cadet/gnunet-cadet.c:827 +#, fuzzy +msgid "Provide information about all tunnels" +msgstr "обезбеђује податке о свим тунелима" + +#: src/consensus/gnunet-consensus-profiler.c:530 +#: src/secretsharing/gnunet-secretsharing-profiler.c:624 +msgid "number of peers in consensus" +msgstr "број парњака у концензусу" + +#: src/consensus/gnunet-consensus-profiler.c:537 +#, fuzzy +msgid "" +"how many peers (random selection without replacement) receive one value?" +msgstr "колико парњака прима једну вредност?" + +#: src/consensus/gnunet-consensus-profiler.c:543 +#: src/set/gnunet-set-profiler.c:451 src/set/gnunet-set-profiler.c:457 +#: src/set/gnunet-set-profiler.c:480 src/seti/gnunet-seti-profiler.c:441 +#: src/seti/gnunet-seti-profiler.c:446 src/seti/gnunet-seti-profiler.c:451 +#: src/setu/gnunet-setu-profiler.c:442 src/setu/gnunet-setu-profiler.c:448 +#: src/setu/gnunet-setu-profiler.c:471 +msgid "number of values" +msgstr "број вредности" + +#: src/consensus/gnunet-consensus-profiler.c:549 +msgid "consensus timeout" +msgstr "време истека концензуса" + +#: src/consensus/gnunet-consensus-profiler.c:557 +msgid "delay until consensus starts" +msgstr "застој док не започне концензус" + +#: src/consensus/gnunet-consensus-profiler.c:563 +#: src/set/gnunet-set-profiler.c:498 src/seti/gnunet-seti-profiler.c:467 +#: src/setu/gnunet-setu-profiler.c:489 +#, fuzzy +msgid "write statistics to file" +msgstr "само исписује вредност статистике" + +#: src/consensus/gnunet-consensus-profiler.c:569 +msgid "distribute elements to a static subset of good peers" +msgstr "" + +#: src/consensus/gnunet-consensus-profiler.c:575 +msgid "be more verbose (print received values)" +msgstr "бива опширнији (исписује примљене вредности)" + +#: src/conversation/conversation_api.c:523 +#: src/conversation/conversation_api_call.c:515 +msgid "Connection to conversation service lost, trying to reconnect\n" +msgstr "" +"Веза са услугом конверзације је изгубљена, покушавам поново да се повежем\n" + +#: src/conversation/gnunet-conversation.c:264 +#, fuzzy, c-format +msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" +msgstr "Долазни позив од „%s“. /прихватите #%u или /откажите %u позив.\n" + +#: src/conversation/gnunet-conversation.c:287 +#, c-format +msgid "Call from `%s' terminated\n" +msgstr "Позив од „%s“ је окончан\n" + +#: src/conversation/gnunet-conversation.c:319 +#, c-format +msgid "Call from `%s' suspended by other user\n" +msgstr "Позив од „%s“ је обуставио други корисник\n" + +#: src/conversation/gnunet-conversation.c:325 +#, c-format +msgid "Call from `%s' resumed by other user\n" +msgstr "Позив од „%s“ је повратио други корисник\n" + +#: src/conversation/gnunet-conversation.c:343 +#, c-format +msgid "Ego `%s' no longer available, phone is now down.\n" +msgstr "Его „%s“ није више доступан, телефон је сада искључен.\n" + +#: src/conversation/gnunet-conversation.c:356 +msgid "Failed to setup phone (internal error)\n" +msgstr "Нисам успео да подесим телефон (унутрашња грешка)\n" + +#: src/conversation/gnunet-conversation.c:368 +#, fuzzy, c-format +msgid "Phone active at `%s'. Type `/help' for a list of available commands\n" +msgstr "" +"Телефон је активан на линији %u. Упишите „/help“ за списак доступних " +"наредби\n" + +#: src/conversation/gnunet-conversation.c:391 +#, c-format msgid "Resolved address of `%s'. Now ringing other party.\n" msgstr "Реших адресу за „%s“. Сада звоним на другој журци.\n" -#: src/conversation/gnunet-conversation.c:397 +#: src/conversation/gnunet-conversation.c:398 #, c-format msgid "Connection established to `%s'\n" msgstr "Веза је успостављена са „%s“\n" @@ -688,205 +928,221 @@ msgid "Failed to resolve `%s'\n" msgstr "Нисам успео да решим „%s“\n" #: src/conversation/gnunet-conversation.c:411 -msgid "Call terminated\n" -msgstr "Позив је окончан\n" +#, fuzzy, c-format +msgid "Call to `%s' terminated\n" +msgstr "Позив од „%s“ је окончан\n" -#: src/conversation/gnunet-conversation.c:417 +#: src/conversation/gnunet-conversation.c:420 #, c-format msgid "Connection to `%s' suspended (by other user)\n" msgstr "Веза са „%s“ је обустављена (други корисник)\n" -#: src/conversation/gnunet-conversation.c:423 +#: src/conversation/gnunet-conversation.c:427 #, c-format msgid "Connection to `%s' resumed (by other user)\n" msgstr "Веза са „%s“ је повраћена (други корисник)\n" -#: src/conversation/gnunet-conversation.c:428 +#: src/conversation/gnunet-conversation.c:432 +#, c-format msgid "Error with the call, restarting it\n" msgstr "Грешка са позивом, поново га покрећем\n" -#: src/conversation/gnunet-conversation.c:495 +#: src/conversation/gnunet-conversation.c:501 #, c-format msgid "Unknown command `%s'\n" msgstr "Непозната наредба „%s“\n" -#: src/conversation/gnunet-conversation.c:511 -#: src/conversation/gnunet-conversation.c:525 +#: src/conversation/gnunet-conversation.c:515 +#: src/conversation/gnunet-conversation.c:527 #, c-format msgid "Ego `%s' not available\n" msgstr "Его „%s“ није доступан\n" -#: src/conversation/gnunet-conversation.c:518 -#: src/conversation/gnunet-conversation.c:575 +#: src/conversation/gnunet-conversation.c:521 +#: src/conversation/gnunet-conversation.c:579 +#, c-format msgid "You are calling someone else already, hang up first!\n" msgstr "Већ позивате некога, спустите прво слушалицу!\n" -#: src/conversation/gnunet-conversation.c:533 -#: src/conversation/gnunet-conversation.c:588 +#: src/conversation/gnunet-conversation.c:538 +#: src/conversation/gnunet-conversation.c:596 #, c-format msgid "You are answering call from `%s', hang up or suspend that call first!\n" -msgstr "Одговарате на позив од „%s“, спустите слушалицу или обуставите тај позив!\n" +msgstr "" +"Одговарате на позив од „%s“, спустите слушалицу или обуставите тај позив!\n" -#: src/conversation/gnunet-conversation.c:544 +#: src/conversation/gnunet-conversation.c:548 +#, c-format msgid "Call recipient missing.\n" msgstr "Недостаје прималац позива.\n" -#: src/conversation/gnunet-conversation.c:599 +#: src/conversation/gnunet-conversation.c:607 +#, c-format msgid "There is no incoming call to accept here!\n" msgstr "Нема долазног позива овде за прихватање!\n" -#: src/conversation/gnunet-conversation.c:616 +#: src/conversation/gnunet-conversation.c:622 #, c-format msgid "There is no incoming call `%s' to accept right now!\n" msgstr "Нема долазног позива „%s“ за прихватање управо сада!\n" -#: src/conversation/gnunet-conversation.c:647 +#: src/conversation/gnunet-conversation.c:649 msgid "We currently do not have an address.\n" msgstr "Тренутно немамамо адресу.\n" -#: src/conversation/gnunet-conversation.c:670 +#: src/conversation/gnunet-conversation.c:673 #, c-format msgid "We are currently trying to locate the private key for the ego `%s'.\n" msgstr "Тренутно покушавамо да лоцирамо лични кључ за его „%s“.\n" -#: src/conversation/gnunet-conversation.c:675 -#, c-format -msgid "We are listening for incoming calls for ego `%s' on line %u.\n" +#: src/conversation/gnunet-conversation.c:680 +#, fuzzy, c-format +msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n" msgstr "Ослушкујемо за долазним позивима за его „%s“ на линији %u.\n" -#: src/conversation/gnunet-conversation.c:681 -#: src/conversation/gnunet-conversation.c:705 +#: src/conversation/gnunet-conversation.c:687 +#: src/conversation/gnunet-conversation.c:717 #, c-format msgid "You are having a conversation with `%s'.\n" msgstr "Разговарате са „%s“.\n" -#: src/conversation/gnunet-conversation.c:686 -msgid "We had an internal error setting up our phone line. You can still make calls.\n" -msgstr "Имали смо унутрашњу грешку подешавајући нашу телефонску линију. Још увек можете обављати позиве.\n" +#: src/conversation/gnunet-conversation.c:696 +#, c-format +msgid "" +"We had an internal error setting up our phone line. You can still make " +"calls.\n" +msgstr "" +"Имали смо унутрашњу грешку подешавајући нашу телефонску линију. Још увек " +"можете обављати позиве.\n" -#: src/conversation/gnunet-conversation.c:695 +#: src/conversation/gnunet-conversation.c:705 #, c-format msgid "We are trying to find the network address to call `%s'.\n" msgstr "Покушавамо да нађемо мрежну адресу за позив „%s“.\n" -#: src/conversation/gnunet-conversation.c:700 -#, c-format -msgid "We are calling `%s', his phone should be ringing.\n" +#: src/conversation/gnunet-conversation.c:711 +#, fuzzy, c-format +msgid "We are calling `%s', their phone should be ringing.\n" msgstr "Позивамо „%s“, његов телефон треба да звони.\n" -#: src/conversation/gnunet-conversation.c:719 +#: src/conversation/gnunet-conversation.c:728 msgid "Calls waiting:\n" msgstr "Чекање позива:\n" -#: src/conversation/gnunet-conversation.c:725 +#: src/conversation/gnunet-conversation.c:734 #, c-format msgid "#%u: `%s'\n" msgstr "#%u: „%s“\n" -#: src/conversation/gnunet-conversation.c:753 -#: src/conversation/gnunet-conversation.c:768 +#: src/conversation/gnunet-conversation.c:761 +#: src/conversation/gnunet-conversation.c:777 msgid "There is no call that could be suspended right now.\n" msgstr "Нема позива који би могао бити обустављен управо сада.\n" -#: src/conversation/gnunet-conversation.c:801 -#: src/conversation/gnunet-conversation.c:817 +#: src/conversation/gnunet-conversation.c:811 +#: src/conversation/gnunet-conversation.c:826 msgid "There is no call that could be resumed right now.\n" msgstr "Нема позива који би могао бити повраћен управо сада.\n" -#: src/conversation/gnunet-conversation.c:824 +#: src/conversation/gnunet-conversation.c:835 #, c-format msgid "Already talking with `%s', cannot resume a call right now.\n" msgstr "Већ разговарате са „%s“, не можете повратити позив управо сада.\n" -#: src/conversation/gnunet-conversation.c:833 +#: src/conversation/gnunet-conversation.c:843 +#, c-format msgid "There is no incoming call to resume here!\n" msgstr "Нема долазног позива овде за повраћај!\n" -#: src/conversation/gnunet-conversation.c:850 +#: src/conversation/gnunet-conversation.c:858 #, c-format msgid "There is no incoming call `%s' to resume right now!\n" msgstr "Нема долазног позива „%s“ за повраћај управо сада!\n" -#: src/conversation/gnunet-conversation.c:885 +#: src/conversation/gnunet-conversation.c:891 msgid "There is no call that could be cancelled right now.\n" msgstr "Нема позива који би могао бити отказан управо сада.\n" -#: src/conversation/gnunet-conversation.c:893 +#: src/conversation/gnunet-conversation.c:899 +#, c-format msgid "There is no incoming call to refuse here!\n" msgstr "Нема долазног позива овде за одбијање!\n" -#: src/conversation/gnunet-conversation.c:910 +#: src/conversation/gnunet-conversation.c:914 #, c-format msgid "There is no incoming call `%s' to refuse right now!\n" msgstr "Нема долазног позива „%s“ за одбијање управо сада!\n" -#: src/conversation/gnunet-conversation.c:937 +#: src/conversation/gnunet-conversation.c:941 msgid "Use `/address' to find out which address this phone should have in GNS" -msgstr "Користите „/address“ да нађете коју адресу треба да има овај телефон у ГНС-у" +msgstr "" +"Користите „/address“ да нађете коју адресу треба да има овај телефон у ГНС-у" -#: src/conversation/gnunet-conversation.c:939 +#: src/conversation/gnunet-conversation.c:942 msgid "Use `/call USER.gnu' to call USER" msgstr "Користите „/call USER.gnu“ да позовете КОРИСНИКА" -#: src/conversation/gnunet-conversation.c:941 +#: src/conversation/gnunet-conversation.c:945 msgid "Use `/accept #NUM' to accept incoming call #NUM" msgstr "Користтие „/accept #NUM“ да прихватите долазни позив #БРОЈ" -#: src/conversation/gnunet-conversation.c:943 +#: src/conversation/gnunet-conversation.c:948 msgid "Use `/suspend' to suspend the active call" msgstr "Користите „/suspend“ да обуставитеактивни позив" -#: src/conversation/gnunet-conversation.c:945 -msgid "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming calls, no argument is needed to resume the current outgoing call." -msgstr "Користите „/resume [#NUM]“ да наставите са позивом, #БРОЈ је потребан за повраћај долазних позива, аргумент није потребан за повраћај тренутно одлазног позива." +#: src/conversation/gnunet-conversation.c:952 +msgid "" +"Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming " +"calls, no argument is needed to resume the current outgoing call." +msgstr "" +"Користите „/resume [#NUM]“ да наставите са позивом, #БРОЈ је потребан за " +"повраћај долазних позива, аргумент није потребан за повраћај тренутно " +"одлазног позива." -#: src/conversation/gnunet-conversation.c:947 +#: src/conversation/gnunet-conversation.c:955 msgid "Use `/cancel' to reject or terminate a call" msgstr "Користите „/cancel“ да одбаците или окончате позив" -#: src/conversation/gnunet-conversation.c:949 +#: src/conversation/gnunet-conversation.c:958 msgid "Use `/status' to print status information" msgstr "Користите „/status“ да испишете податке о стању" -#: src/conversation/gnunet-conversation.c:951 +#: src/conversation/gnunet-conversation.c:961 msgid "Use `/quit' to terminate gnunet-conversation" msgstr "Користите „/quit“ да окончате „gnunet-conversation“" -#: src/conversation/gnunet-conversation.c:953 +#: src/conversation/gnunet-conversation.c:964 msgid "Use `/help command' to get help for a specific command" msgstr "Користите „/help наредба“ да добијете помоћ за неку наредбу" -#: src/conversation/gnunet-conversation.c:1151 +#: src/conversation/gnunet-conversation.c:1124 #, c-format msgid "Name of our ego changed to `%s'\n" msgstr "Назив нашег ега је промењен у „%s“\n" -#: src/conversation/gnunet-conversation.c:1164 +#: src/conversation/gnunet-conversation.c:1134 #, c-format msgid "Our ego `%s' was deleted!\n" msgstr "Наш его „%s“ је обрисан!\n" -#: src/conversation/gnunet-conversation.c:1199 +#: src/conversation/gnunet-conversation.c:1166 msgid "You must specify the NAME of an ego to use\n" msgstr "Морате навести НАЗИВ егоа за коришћење\n" -#: src/conversation/gnunet-conversation.c:1223 -msgid "Failed to start gnunet-helper-w32-console\n" -msgstr "Нисам успео да покренем „gnunet-helper-w32-console“\n" - -#: src/conversation/gnunet-conversation.c:1249 -msgid "sets the NAME of the ego to use for the phone (and name resolution)" +#: src/conversation/gnunet-conversation.c:1193 +#, fuzzy +msgid "sets the NAME of the ego to use for the caller ID" msgstr "поставља НАЗИВ егоа за коришћење за телефон (и решавање назива)" -#: src/conversation/gnunet-conversation.c:1252 +#: src/conversation/gnunet-conversation.c:1199 msgid "sets the LINE to use for the phone" msgstr "поставља РЕД за коришћење за телефон" -#: src/conversation/gnunet-conversation.c:1276 +#: src/conversation/gnunet-conversation.c:1218 msgid "Enables having a conversation with other GNUnet users." msgstr "Укључује могућност конверзације са другим ГНУнет корисницима." -#: src/conversation/gnunet-conversation-test.c:121 +#: src/conversation/gnunet-conversation-test.c:120 #, c-format msgid "" "\n" @@ -895,811 +1151,875 @@ msgstr "" "\n" "Крај преноса. Нека вам је ГНУ дан.\n" -#: src/conversation/gnunet-conversation-test.c:149 +#: src/conversation/gnunet-conversation-test.c:146 #, c-format msgid "" "\n" -"We are now playing your recording back. If you can hear it, your audio settings are working..." +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." msgstr "" "\n" -"Сада пуштамо ваш снимак. Ако можете да га чујете, ваша подешавања звука су добра..." +"Сада пуштамо ваш снимак. Ако можете да га чујете, ваша подешавања звука су " +"добра..." -#: src/conversation/gnunet-conversation-test.c:215 +#: src/conversation/gnunet-conversation-test.c:218 #, c-format -msgid "We will now be recording you for %s. After that time, the recording will be played back to you..." -msgstr "Сада ћемо вас снимати за %s. Након тог времена, снимак ће вам бити пуштен..." +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" +"Сада ћемо вас снимати за %s. Након тог времена, снимак ће вам бити пуштен..." -#: src/conversation/gnunet-conversation-test.c:248 -#: src/multicast/gnunet-multicast.c:70 src/revocation/gnunet-revocation.c:522 -#: src/template/gnunet-template.c:70 -msgid "help text" -msgstr "текст помоћи" +#: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#, c-format +msgid "Read error from STDIN: %d %s\n" +msgstr "Грешка читања са СТНДУЛАЗА: %d %s\n" -#: src/conversation/gnunet-helper-audio-playback.c:305 +#: src/conversation/gnunet-helper-audio-playback.c:330 #, c-format msgid "pa_stream_write() failed: %s\n" msgstr "Није успело „pa_stream_write()“: %s\n" -#: src/conversation/gnunet-helper-audio-playback.c:587 +#: src/conversation/gnunet-helper-audio-playback.c:649 msgid "gnunet-helper-audio-playback - Got signal, exiting\n" msgstr "gnunet-helper-audio-playback – Добих сигнал, излазим\n" -#: src/conversation/gnunet-helper-audio-playback.c:612 -#: src/conversation/gnunet-helper-audio-record.c:545 +#: src/conversation/gnunet-helper-audio-playback.c:676 +#: src/conversation/gnunet-helper-audio-record.c:568 msgid "Connection established.\n" msgstr "Веза је успостављена.\n" -#: src/conversation/gnunet-helper-audio-playback.c:617 -#: src/conversation/gnunet-helper-audio-record.c:550 +#: src/conversation/gnunet-helper-audio-playback.c:681 +#: src/conversation/gnunet-helper-audio-record.c:573 #, c-format msgid "pa_stream_new() failed: %s\n" msgstr "Није успело „pa_stream_new()“: %s\n" -#: src/conversation/gnunet-helper-audio-playback.c:631 +#: src/conversation/gnunet-helper-audio-playback.c:697 #, c-format msgid "pa_stream_connect_playback() failed: %s\n" msgstr "Није успело „pa_stream_connect_playback()“: %s\n" -#: src/conversation/gnunet-helper-audio-playback.c:644 -#: src/conversation/gnunet-helper-audio-record.c:576 +#: src/conversation/gnunet-helper-audio-playback.c:711 +#: src/conversation/gnunet-helper-audio-record.c:601 #, c-format msgid "Connection failure: %s\n" msgstr "Неуспешно повезивање: %s\n" -#: src/conversation/gnunet-helper-audio-playback.c:665 -#: src/conversation/gnunet-helper-audio-record.c:599 +#: src/conversation/gnunet-helper-audio-playback.c:732 +#: src/conversation/gnunet-helper-audio-record.c:624 msgid "Wrong Spec\n" msgstr "Погрешна спец\n" -#: src/conversation/gnunet-helper-audio-playback.c:671 -#: src/conversation/gnunet-helper-audio-record.c:605 +#: src/conversation/gnunet-helper-audio-playback.c:738 +#: src/conversation/gnunet-helper-audio-record.c:630 msgid "pa_mainloop_new() failed.\n" msgstr "Није успело „pa_mainloop_new()“.\n" -#: src/conversation/gnunet-helper-audio-playback.c:685 -#: src/conversation/gnunet-helper-audio-record.c:620 +#: src/conversation/gnunet-helper-audio-playback.c:752 +#: src/conversation/gnunet-helper-audio-record.c:645 msgid "pa_context_new() failed.\n" msgstr "Није успело „pa_context_new()“.\n" -#: src/conversation/gnunet-helper-audio-playback.c:692 -#: src/conversation/gnunet-helper-audio-record.c:626 +#: src/conversation/gnunet-helper-audio-playback.c:759 +#: src/conversation/gnunet-helper-audio-record.c:651 #, c-format msgid "pa_context_connect() failed: %s\n" msgstr "Није успело „pa_context_connect()“: %s\n" -#: src/conversation/gnunet-helper-audio-playback.c:698 -#: src/conversation/gnunet-helper-audio-record.c:632 +#: src/conversation/gnunet-helper-audio-playback.c:765 +#: src/conversation/gnunet-helper-audio-record.c:657 msgid "pa_mainloop_run() failed.\n" msgstr "Није успело „pa_mainloop_run()“.\n" -#: src/conversation/gnunet-helper-audio-playback.c:768 +#: src/conversation/gnunet-helper-audio-playback.c:845 #, c-format msgid "Read error from STDIN: %s\n" msgstr "Грешка читања са СТНДУЛАЗА: %s\n" -#: src/conversation/gnunet-helper-audio-playback-gst.c:325 -#, c-format -msgid "Read error from STDIN: %d %s\n" -msgstr "Грешка читања са СТНДУЛАЗА: %d %s\n" - -#: src/conversation/gnunet-helper-audio-record.c:344 +#: src/conversation/gnunet-helper-audio-record.c:356 #, c-format msgid "opus_encode_float() failed: %s. Aborting\n" msgstr "Није успело „opus_encode_float()“: %s. Прекидам\n" -#: src/conversation/gnunet-helper-audio-record.c:420 +#: src/conversation/gnunet-helper-audio-record.c:435 #, c-format msgid "pa_stream_peek() failed: %s\n" msgstr "Није успело „pa_stream_peek()“: %s\n" -#: src/conversation/gnunet-helper-audio-record.c:458 +#: src/conversation/gnunet-helper-audio-record.c:477 msgid "Got signal, exiting.\n" msgstr "Добих сигнал, излазим.\n" -#: src/conversation/gnunet-helper-audio-record.c:483 +#: src/conversation/gnunet-helper-audio-record.c:504 msgid "Stream successfully created.\n" msgstr "Ток је успешно направљен.\n" -#: src/conversation/gnunet-helper-audio-record.c:488 +#: src/conversation/gnunet-helper-audio-record.c:509 #, c-format msgid "pa_stream_get_buffer_attr() failed: %s\n" msgstr "Није успело „pa_stream_get_buffer_attr()“: %s\n" -#: src/conversation/gnunet-helper-audio-record.c:496 +#: src/conversation/gnunet-helper-audio-record.c:516 #, c-format msgid "Buffer metrics: maxlength=%u, fragsize=%u\n" msgstr "Мере бафера: maxlength=%u, fragsize=%u\n" -#: src/conversation/gnunet-helper-audio-record.c:500 +#: src/conversation/gnunet-helper-audio-record.c:520 #, c-format msgid "Using sample spec '%s', channel map '%s'.\n" msgstr "Користим спецификацију узорка „%s“, мапа канала „%s“.\n" -#: src/conversation/gnunet-helper-audio-record.c:507 +#: src/conversation/gnunet-helper-audio-record.c:527 #, c-format msgid "Connected to device %s (%u, %ssuspended).\n" msgstr "Повезан са уређајем %s (%u, %sобустављено).\n" -#: src/conversation/gnunet-helper-audio-record.c:516 +#: src/conversation/gnunet-helper-audio-record.c:537 #, c-format msgid "Stream error: %s\n" msgstr "Грешка тока: %s\n" -#: src/conversation/gnunet-helper-audio-record.c:563 +#: src/conversation/gnunet-helper-audio-record.c:586 #, c-format msgid "pa_stream_connect_record() failed: %s\n" msgstr "Није успело „pa_stream_connect_record()“: %s\n" -#: src/conversation/gnunet-helper-audio-record.c:676 +#: src/conversation/gnunet-helper-audio-record.c:703 msgid "ogg_stream_init() failed.\n" msgstr "Није успело „ogg_stream_init()“.\n" -#: src/conversation/gnunet-helper-audio-record.c:721 -#, c-format -msgid "Failed to allocate %d bytes for second packet\n" +#: src/conversation/gnunet-helper-audio-record.c:748 +#, fuzzy, c-format +msgid "Failed to allocate %u bytes for second packet\n" msgstr "Нисам успео да доделим %d бајта за други пакет\n" -#: src/conversation/gnunet-service-conversation.c:841 -msgid "Mesh audio channel not ready; audio data dropped\n" -msgstr "Звучни канал меша није спреман; звучни подаци су одбачени\n" - -#: src/conversation/gnunet-service-conversation.c:932 -#, c-format -msgid "No available phone for incoming call on line %u, sending HANG_UP signal\n" -msgstr "Нема доступних телефона за долазни позив на линији %u, шаљем сигнал ПРЕКИД\n" - -#: src/conversation/gnunet-service-conversation.c:1338 -#, c-format -msgid "Received incoming channel on port %u\n" -msgstr "Примих долазни канал на прикључник %u\n" +#: src/conversation/gnunet-service-conversation.c:1286 +#, fuzzy, c-format +msgid "Could not open line, port %s already in use!\n" +msgstr "Не могу да се повежем са „%s“ услугом!\n" -#: src/conversation/microphone.c:121 +#: src/conversation/microphone.c:118 msgid "Could not start record audio helper\n" msgstr "Не могу да покренем помоћника аудио снимања\n" -#: src/conversation/plugin_gnsrecord_conversation.c:116 +#: src/conversation/plugin_gnsrecord_conversation.c:72 +#, fuzzy, c-format +msgid "PHONE version %u not supported\n" +msgstr "Протокол %u није подржан, одбацујем\n" + +#: src/conversation/plugin_gnsrecord_conversation.c:136 +#: src/conversation/plugin_gnsrecord_conversation.c:150 #, c-format msgid "Unable to parse PHONE record `%s'\n" msgstr "Не могу да обрадим ТЕЛЕФОНСКИ снимак „%s“\n" -#: src/conversation/speaker.c:75 +#: src/conversation/speaker.c:73 msgid "Could not start playback audio helper.\n" msgstr "Не могу да покренем помоћника аудио пуштања.\n" -#: src/core/core_api.c:767 -msgid "Client was disconnected from core service, trying to reconnect.\n" -msgstr "Клијент је ископчан са кључне услуге, покушавам поново да се повежем.\n" +#: src/core/gnunet-core.c:91 +#, fuzzy +msgid "fresh connection" +msgstr "# пријатељи су повезани" -#: src/core/gnunet-core.c:80 -#, c-format -msgid "Peer `%s'\n" -msgstr "Парњак „%s“\n" +#: src/core/gnunet-core.c:95 +msgid "key sent" +msgstr "" -#: src/core/gnunet-core.c:110 src/core/gnunet-core.c:138 -#: src/transport/gnunet-transport.c:910 src/transport/gnunet-transport.c:930 -#, c-format -msgid "%24s: %-17s %4s (%u connections in total)\n" -msgstr "%24s: %-17s %4s (укупно повезивања: %u)\n" +#: src/core/gnunet-core.c:99 +#, fuzzy +msgid "key received" +msgstr "# Резултати су примљени" -#: src/core/gnunet-core.c:112 src/transport/gnunet-transport.c:911 -msgid "Connected to" -msgstr "Повезани сте са" +#: src/core/gnunet-core.c:103 +#, fuzzy +msgid "connection established" +msgstr "Веза је успостављена.\n" -#: src/core/gnunet-core.c:140 src/transport/gnunet-transport.c:931 -msgid "Disconnected from" +#: src/core/gnunet-core.c:107 +msgid "rekeying" +msgstr "" + +#: src/core/gnunet-core.c:111 +#, fuzzy +msgid "disconnected" msgstr "Прекинута је веза са" -#: src/core/gnunet-core.c:211 src/peerinfo-tool/gnunet-peerinfo.c:694 +#: src/core/gnunet-core.c:120 +#, fuzzy +msgid "Connection to CORE service lost (reconnecting)" +msgstr "" +"Веза са услугом конверзације је изгубљена, покушавам поново да се повежем\n" + +#: src/core/gnunet-core.c:124 +#, fuzzy +msgid "unknown state" +msgstr "<непознато време>" + +#: src/core/gnunet-core.c:129 +#, fuzzy, c-format +msgid "%24s: %-30s %4s (timeout in %6s)\n" +msgstr "%24s: %-17s %4s (укупно повезивања: %u)\n" + +#: src/core/gnunet-core.c:157 src/peerinfo-tool/gnunet-peerinfo.c:696 #, c-format msgid "Invalid command line argument `%s'\n" msgstr "Неисправан аргумент линије наредби „%s“\n" -#: src/core/gnunet-core.c:233 src/transport/gnunet-transport.c:1486 +#: src/core/gnunet-core.c:163 +msgid "Failed to connect to CORE service!\n" +msgstr "Нисам успео да се повежем са ЈЕЗГРЕНОМ услугом!\n" + +#: src/core/gnunet-core.c:186 src/transport/gnunet-transport.c:1389 msgid "provide information about all current connections (continuously)" msgstr "обезбеђује податке о свим тренутним везама (непрекидно)" -#: src/core/gnunet-core.c:244 +#: src/core/gnunet-core.c:196 msgid "Print information about connected peers." msgstr "Исписује податке о повезаним парњацима." -#: src/core/gnunet-service-core.c:105 -msgid "Core service is lacking HOSTKEY configuration setting. Exiting.\n" -msgstr "Услузи језгра недостаје поставка подешавања КЉУЧА_ДОМАЋИНА. Излазим.\n" - -#: src/core/gnunet-service-core.c:126 -#, c-format -msgid "Core service of `%4s' ready.\n" -msgstr "Кључна услуга „%4s“ је спремна.\n" - -#: src/core/gnunet-service-core_clients.c:370 +#: src/core/gnunet-service-core.c:329 msgid "# send requests dropped (disconnected)" msgstr "# захтеви слања су одбачени (веза је прекинута)" -#: src/core/gnunet-service-core_clients.c:480 -msgid "# messages discarded (session disconnected)" -msgstr "# поруке су одбачене (сесија је ископчана)" +#: src/core/gnunet-service-core.c:355 +msgid "# dequeuing CAR (duplicate request)" +msgstr "" -#: src/core/gnunet-service-core_clients.c:526 +#: src/core/gnunet-service-core.c:419 #, c-format msgid "# bytes of messages of type %u received" msgstr "# бајтови порука врсте %u су примљени" -#: src/core/gnunet-service-core_kx.c:535 +#: src/core/gnunet-service-core.c:506 +msgid "# messages discarded (session disconnected)" +msgstr "# поруке су одбачене (сесија је ископчана)" + +#: src/core/gnunet-service-core.c:825 +#, fuzzy, c-format +msgid "# messages of type %u discarded (client busy)" +msgstr "# бајтови порука врсте %u су примљени" + +#: src/core/gnunet-service-core.c:927 +msgid "Core service is lacking HOSTKEY configuration setting. Exiting.\n" +msgstr "" +"Услузи језгра недостаје поставка подешавања КЉУЧА_ДОМАЋИНА. Излазим.\n" + +#: src/core/gnunet-service-core.c:955 +#, fuzzy, c-format +msgid "Core service of `%s' ready.\n" +msgstr "Кључна услуга „%4s“ је спремна.\n" + +#: src/core/gnunet-service-core_kx.c:512 msgid "# bytes encrypted" msgstr "# бајтова шифрованих" -#: src/core/gnunet-service-core_kx.c:586 +#: src/core/gnunet-service-core_kx.c:570 msgid "# bytes decrypted" msgstr "# бајтова дешифрованих" -#: src/core/gnunet-service-core_kx.c:673 +#: src/core/gnunet-service-core_kx.c:667 +msgid "# PAYLOAD dropped (out of order)" +msgstr "# УТОВАР је одбачен (ван поретка)" + +#: src/core/gnunet-service-core_kx.c:719 msgid "# key exchanges initiated" msgstr "# кључ измена је покренут" -#: src/core/gnunet-service-core_kx.c:713 +#: src/core/gnunet-service-core_kx.c:775 msgid "# key exchanges stopped" msgstr "# кључ измена је заустављен" -#: src/core/gnunet-service-core_kx.c:810 +#: src/core/gnunet-service-core_kx.c:807 +#, fuzzy +msgid "# PING messages transmitted" +msgstr "# ПОНГ поруке су направљене" + +#: src/core/gnunet-service-core_kx.c:866 msgid "# old ephemeral keys ignored" msgstr "# стари једнократни кључеви су занемарени" -#: src/core/gnunet-service-core_kx.c:816 -msgid "# ephemeral keys received" -msgstr "# једнократни кључеви су примљени" +#: src/core/gnunet-service-core_kx.c:880 +#, fuzzy +msgid "# duplicate ephemeral keys ignored" +msgstr "# стари једнократни кључеви су занемарени" -#: src/core/gnunet-service-core_kx.c:850 -#, c-format -msgid "Ephemeral key message from peer `%s' rejected as its validity range does not match our system time (%llu not in [%llu,%llu]).\n" -msgstr "Порука једнократног кључа од парњака „%s“ је одбачена јер њен опсег исправности не одговара времену нашег система (%llu није у [%llu,%llu]).\n" +#: src/core/gnunet-service-core_kx.c:915 +#, fuzzy +msgid "# EPHEMERAL_KEYs rejected (bad signature)" +msgstr "# поруке ЈЕДНОКРАТНОГ_КЉУЧА су примљене" + +#: src/core/gnunet-service-core_kx.c:933 +#, fuzzy, c-format +msgid "" +"EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match " +"our system time (%llu not in [%llu,%llu]).\n" +msgstr "" +"Порука једнократног кључа од парњака „%s“ је одбачена јер њен опсег " +"исправности не одговара времену нашег система (%llu није у [%llu,%llu]).\n" -#: src/core/gnunet-service-core_kx.c:861 -msgid "# EPHEMERAL_KEY messages received" +#: src/core/gnunet-service-core_kx.c:940 +#, fuzzy +msgid "# EPHEMERAL_KEY messages rejected due to time" msgstr "# поруке ЈЕДНОКРАТНОГ_КЉУЧА су примљене" -#: src/core/gnunet-service-core_kx.c:951 -#: src/transport/gnunet-service-transport_validation.c:1016 +#: src/core/gnunet-service-core_kx.c:958 +#, fuzzy +msgid "# valid ephemeral keys received" +msgstr "# једнократни кључеви су примљени" + +#: src/core/gnunet-service-core_kx.c:1067 +#: src/transport/gnunet-service-transport_validation.c:1133 msgid "# PING messages received" msgstr "# ПИНГ поруке су примљене" -#: src/core/gnunet-service-core_kx.c:959 +#: src/core/gnunet-service-core_kx.c:1077 msgid "# PING messages dropped (out of order)" msgstr "# ПИНГ поруке су одбачене (ван поретка)" -#: src/core/gnunet-service-core_kx.c:986 -#, c-format -msgid "Received PING from `%s' for different identity: I am `%s', PONG identity: `%s'\n" -msgstr "Примих ПИНГ са „%s“ за другачији идентитет: Ја сам „%s“, ПОНГ идентитет: „%s“\n" - -#: src/core/gnunet-service-core_kx.c:1003 +#: src/core/gnunet-service-core_kx.c:1126 msgid "# PONG messages created" msgstr "# ПОНГ поруке су направљене" -#: src/core/gnunet-service-core_kx.c:1029 +#: src/core/gnunet-service-core_kx.c:1151 msgid "# sessions terminated by timeout" msgstr "# сесије су окончане временским истеком" -#: src/core/gnunet-service-core_kx.c:1039 +#: src/core/gnunet-service-core_kx.c:1164 msgid "# keepalive messages sent" msgstr "# поруке држања у животу су послате" -#: src/core/gnunet-service-core_kx.c:1096 -#: src/transport/gnunet-service-transport_validation.c:1328 +#: src/core/gnunet-service-core_kx.c:1221 +#: src/transport/gnunet-service-transport_validation.c:1476 msgid "# PONG messages received" msgstr "# ПОНГ поруке су примљене" -#: src/core/gnunet-service-core_kx.c:1102 +#: src/core/gnunet-service-core_kx.c:1229 msgid "# PONG messages dropped (connection down)" msgstr "# ПОНГ поруке су одбачене (веза је пала)" -#: src/core/gnunet-service-core_kx.c:1107 +#: src/core/gnunet-service-core_kx.c:1237 msgid "# PONG messages dropped (out of order)" msgstr "# ПОНГ поруке су одбачене (ван поретка)" -#: src/core/gnunet-service-core_kx.c:1137 +#: src/core/gnunet-service-core_kx.c:1276 msgid "# PONG messages decrypted" msgstr "# ПОНГ поруке су дешифроване" -#: src/core/gnunet-service-core_kx.c:1171 +#: src/core/gnunet-service-core_kx.c:1316 msgid "# session keys confirmed via PONG" msgstr "# кључеви сесије су потврђени путем ПОНГ-а" -#: src/core/gnunet-service-core_kx.c:1181 +#: src/core/gnunet-service-core_kx.c:1328 msgid "# timeouts prevented via PONG" msgstr "# временски истеци су спречени путем ПОНГ-а" -#: src/core/gnunet-service-core_kx.c:1188 +#: src/core/gnunet-service-core_kx.c:1337 msgid "# rekey operations confirmed via PONG" msgstr "# операције рекључа су потврђене путем ПОНГ-а" -#: src/core/gnunet-service-core_kx.c:1328 +#: src/core/gnunet-service-core_kx.c:1513 msgid "# DATA message dropped (out of order)" msgstr "# ПОДАТАКА порука је одбачена (ван поретка)" -#: src/core/gnunet-service-core_kx.c:1335 +#: src/core/gnunet-service-core_kx.c:1524 #, c-format -msgid "Session to peer `%s' went down due to key expiration (should not happen)\n" -msgstr "Сесија за парњака „%s“ је пала услед истека кључа (није требало да се деси)\n" +msgid "" +"Session to peer `%s' went down due to key expiration (should not happen)\n" +msgstr "" +"Сесија за парњака „%s“ је пала услед истека кључа (није требало да се деси)\n" -#: src/core/gnunet-service-core_kx.c:1338 +#: src/core/gnunet-service-core_kx.c:1528 msgid "# sessions terminated by key expiration" msgstr "# сесије су окончане истеком кључа" -#: src/core/gnunet-service-core_kx.c:1383 -#: src/core/gnunet-service-core_kx.c:1408 +#: src/core/gnunet-service-core_kx.c:1606 +#: src/core/gnunet-service-core_kx.c:1633 msgid "# bytes dropped (duplicates)" msgstr "# бајтови одбачени (удвострученост)" -#: src/core/gnunet-service-core_kx.c:1395 +#: src/core/gnunet-service-core_kx.c:1619 msgid "# bytes dropped (out of sequence)" msgstr "# бајтови одбачени (ван низа)" -#: src/core/gnunet-service-core_kx.c:1437 +#: src/core/gnunet-service-core_kx.c:1664 msgid "# bytes dropped (ancient message)" msgstr "# бајтови одбачени (стара порука)" -#: src/core/gnunet-service-core_kx.c:1445 +#: src/core/gnunet-service-core_kx.c:1673 msgid "# bytes of payload decrypted" msgstr "# бајтови утовара су дешифровани" -#: src/core/gnunet-service-core_kx.c:1480 -msgid "# PAYLOAD dropped (out of order)" -msgstr "# УТОВАР је одбачен (ван поретка)" - -#: src/core/gnunet-service-core_neighbours.c:168 -msgid "# sessions terminated by transport disconnect" -msgstr "# окончане сесије прекидом преноса" - -#: src/core/gnunet-service-core_neighbours.c:184 -#: src/core/gnunet-service-core_neighbours.c:335 -msgid "# neighbour entries allocated" -msgstr "# уноси суседа су додељени" - -#: src/core/gnunet-service-core_neighbours.c:252 -msgid "# encrypted bytes given to transport" -msgstr "# шифровани бајтови су дати преносу" - -#: src/core/gnunet-service-core_neighbours.c:418 -#, c-format -msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" -msgstr "Неподржана порука врсте %u (%u бајта) је примљена са парњака „%s“\n" - -#: src/core/gnunet-service-core_sessions.c:216 -#: src/core/gnunet-service-core_sessions.c:288 -#: src/dht/gnunet-service-dht_neighbours.c:662 -#: src/dht/gnunet-service-dht_neighbours.c:727 -#: src/dht/gnunet-service-xdht_neighbours.c:1304 -#: src/fs/gnunet-service-fs_cp.c:606 src/fs/gnunet-service-fs_cp.c:1501 -#: src/topology/gnunet-daemon-topology.c:707 -#: src/topology/gnunet-daemon-topology.c:808 -#: src/transport/gnunet-service-transport_neighbours.c:917 -#: src/transport/gnunet-service-transport_neighbours.c:1141 -#: src/transport/gnunet-service-transport_neighbours.c:3142 -#: src/transport/gnunet-service-transport_neighbours.c:3438 +#: src/core/gnunet-service-core_sessions.c:252 +#: src/core/gnunet-service-core_sessions.c:337 +#: src/dht/gnunet-service-dht_neighbours.c:740 +#: src/dht/gnunet-service-dht_neighbours.c:803 +#: src/fs/gnunet-service-fs_cp.c:610 src/fs/gnunet-service-fs_cp.c:1522 +#: src/topology/gnunet-daemon-topology.c:579 +#: src/topology/gnunet-daemon-topology.c:671 +#: src/transport/gnunet-service-transport_neighbours.c:723 +#: src/transport/gnunet-service-transport_neighbours.c:731 msgid "# peers connected" msgstr "# парњаци су повезани" -#: src/core/gnunet-service-core_sessions.c:255 +#: src/core/gnunet-service-core_sessions.c:285 msgid "# type map refreshes sent" msgstr "# освежавања мапе врсте су послата" -#: src/core/gnunet-service-core_sessions.c:426 -msgid "# messages discarded (expired prior to transmission)" -msgstr "# поруке су одбачене (истекле су пре преноса)" +#: src/core/gnunet-service-core_sessions.c:400 +#, fuzzy +msgid "# outdated typemap confirmations received" +msgstr "# мапе врсте су примљене" + +#: src/core/gnunet-service-core_sessions.c:418 +#, fuzzy +msgid "# valid typemap confirmations received" +msgstr "# мапе врсте су примљене" -#: src/core/gnunet-service-core_typemap.c:110 -#: src/core/gnunet-service-core_typemap.c:121 +#: src/core/gnunet-service-core_typemap.c:170 +#: src/core/gnunet-service-core_typemap.c:184 msgid "# type maps received" msgstr "# мапе врсте су примљене" -#: src/core/gnunet-service-core_typemap.c:151 +#: src/core/gnunet-service-core_typemap.c:218 msgid "# updates to my type map" msgstr "# ажурирања за моју мапу врсте" -#: src/datacache/datacache.c:115 src/datacache/datacache.c:266 -#: src/datastore/gnunet-service-datastore.c:838 +#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 +#: src/datastore/gnunet-service-datastore.c:742 msgid "# bytes stored" msgstr "# бајтови су смештени" -#: src/datacache/datacache.c:117 src/datacache/datacache.c:268 +#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 msgid "# items stored" msgstr "# ставке су смештене" -#: src/datacache/datacache.c:143 src/datacache/datacache.c:150 -#: src/datastore/gnunet-service-datastore.c:1487 -#: src/datastore/gnunet-service-datastore.c:1498 -#, c-format -msgid "No `%s' specified for `%s' in configuration!\n" -msgstr "Није наведено „%s“ за „%s“ у подешавањима!\n" - -#: src/datacache/datacache.c:184 +#: src/datacache/datacache.c:189 #, c-format msgid "Loading `%s' datacache plugin\n" msgstr "Учитавам прикључак „%s“ оставе података\n" -#: src/datacache/datacache.c:192 +#: src/datacache/datacache.c:197 #, c-format msgid "Failed to load datacache plugin for `%s'\n" msgstr "Нисам успео да учитам прикључак оставе података за „%s“\n" -#: src/datacache/datacache.c:295 +#: src/datacache/datacache.c:320 msgid "# requests received" msgstr "# захтеви су примљени" -#: src/datacache/datacache.c:304 +#: src/datacache/datacache.c:331 msgid "# requests filtered by bloom filter" msgstr "# захтеви су филтрирани блум филтером" -#: src/datacache/plugin_datacache_heap.c:406 +#: src/datacache/datacache.c:358 +#, fuzzy +msgid "# requests for random value received" +msgstr "# захтеви су примљени" + +#: src/datacache/datacache.c:388 +#, fuzzy +msgid "# proximity search requests received" +msgstr "# претраге клијента су примљене" + +#: src/datacache/plugin_datacache_heap.c:554 msgid "Heap datacache running\n" msgstr "Остава података скупине ради\n" -#: src/datacache/plugin_datacache_postgres.c:392 -msgid "Postgres datacache running\n" -msgstr "Остава података Постгреса ради\n" - -#: src/datacache/plugin_datacache_sqlite.c:69 -#: src/datacache/plugin_datacache_sqlite.c:72 -#: src/datastore/plugin_datastore_mysql.c:806 -#: src/datastore/plugin_datastore_mysql.c:820 -#: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 -#: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 -#: src/mysql/mysql.c:591 src/mysql/mysql.c:607 -#: src/namecache/plugin_namecache_postgres.c:52 -#: src/namecache/plugin_namecache_sqlite.c:52 -#: src/namestore/plugin_namestore_postgres.c:52 -#: src/namestore/plugin_namestore_sqlite.c:52 -#: src/testbed/generate-underlay-topology.c:47 -#: src/testbed/gnunet-daemon-latency-logger.c:52 -#: src/testbed/gnunet-daemon-testbed-underlay.c:55 -#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 -#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:602 -#: src/include/gnunet_common.h:611 src/scalarproduct/scalarproduct.h:50 +#: src/datacache/plugin_datacache_sqlite.c:123 +#: src/datacache/plugin_datacache_sqlite.c:144 +#: src/datastore/plugin_datastore_mysql.c:890 +#: src/datastore/plugin_datastore_sqlite.c:63 +#: src/datastore/plugin_datastore_sqlite.c:81 src/my/my.c:81 src/my/my.c:93 +#: src/mysql/mysql.c:46 src/mysql/mysql.c:64 +#: src/namecache/plugin_namecache_sqlite.c:54 +#: src/namestore/plugin_namestore_sqlite.c:55 +#: src/peerstore/plugin_peerstore_sqlite.c:54 +#: src/testbed/generate-underlay-topology.c:48 +#: src/testbed/gnunet-daemon-latency-logger.c:53 +#: src/testbed/gnunet-daemon-testbed-underlay.c:57 +#: src/testbed/testbed_api_hosts.c:72 src/util/crypto_ecc.c:62 +#: src/util/crypto_ecc_setup.c:47 src/util/crypto_mpi.c:40 #, c-format msgid "`%s' failed at %s:%d with error: %s\n" msgstr "„%s“ није успело на %s:%d са грешком: %s\n" -#: src/datacache/plugin_datacache_sqlite.c:450 -msgid "Sqlite datacache running\n" -msgstr "Остава података Скулајта ради\n" - -#: src/datacache/plugin_datacache_sqlite.c:484 -#: src/datastore/plugin_datastore_sqlite.c:404 -#: src/namecache/plugin_namecache_sqlite.c:295 -#: src/namestore/plugin_namestore_sqlite.c:327 +#: src/datacache/plugin_datacache_sqlite.c:783 +#: src/datastore/plugin_datastore_sqlite.c:531 +#: src/namecache/plugin_namecache_sqlite.c:237 +#: src/namestore/plugin_namestore_sqlite.c:273 msgid "Tried to close sqlite without finalizing all prepared statements.\n" msgstr "Покушај да затворим скулајт без довршавања свих спремљених изјава.\n" -#: src/datacache/plugin_datacache_sqlite.c:491 -#, c-format -msgid "Failed to close statement %p: %d\n" -msgstr "Нисам успео да затворим тврдњу „%p“: %d\n" - -#: src/datacache/plugin_datacache_template.c:125 -msgid "Template datacache running\n" -msgstr "Остава података шаблона ради\n" - -#: src/datastore/datastore_api.c:310 -msgid "Failed to transmit request to drop database.\n" -msgstr "Нисам успео да пренесем захтев бази података убацивања.\n" +#: src/datastore/datastore_api.c:340 +#, fuzzy +msgid "DATASTORE disconnected" +msgstr "Прекинута је веза са" -#: src/datastore/datastore_api.c:394 -msgid "# queue entry timeouts" -msgstr "# истекла су времена уноса реда" +#: src/datastore/datastore_api.c:462 +#, fuzzy +msgid "Disconnected from DATASTORE" +msgstr "Прекинута је веза са" -#: src/datastore/datastore_api.c:443 +#: src/datastore/datastore_api.c:565 msgid "# queue overflows" msgstr "# прекорачења реда" -#: src/datastore/datastore_api.c:471 +#: src/datastore/datastore_api.c:595 msgid "# queue entries created" msgstr "# уноси реда су створени" -#: src/datastore/datastore_api.c:491 -msgid "# Requests dropped from datastore queue" -msgstr "# Захтеви су одбачени из реда смештаја података" +#: src/datastore/datastore_api.c:756 +msgid "# status messages received" +msgstr "# поруке стања су примљене" + +#: src/datastore/datastore_api.c:810 +msgid "# Results received" +msgstr "# Резултати су примљени" -#: src/datastore/datastore_api.c:533 +#: src/datastore/datastore_api.c:917 msgid "# datastore connections (re)created" msgstr "# везе смештаја података су (поново) створене" -#: src/datastore/datastore_api.c:616 src/scalarproduct/scalarproduct_api.c:279 -msgid "# transmission request failures" -msgstr "# неуспеси захтева преноса" - -#: src/datastore/datastore_api.c:638 -msgid "# bytes sent to datastore" -msgstr "# бајтови су послати смештају података" - -#: src/datastore/datastore_api.c:770 -msgid "Failed to receive status response from database." -msgstr "Нисам успео да примим одговор стања из базе података." - -#: src/datastore/datastore_api.c:784 -msgid "Error reading response from datastore service" -msgstr "Грешка читања одговора из услуге смештаја података" - -#: src/datastore/datastore_api.c:796 src/datastore/datastore_api.c:802 -msgid "Invalid error message received from datastore service" -msgstr "Неисправна порука грешке је примљена из услуге смештаја података" - -#: src/datastore/datastore_api.c:806 -msgid "# status messages received" -msgstr "# поруке стања су примљене" - -#: src/datastore/datastore_api.c:876 +#: src/datastore/datastore_api.c:1032 msgid "# PUT requests executed" msgstr "# захтеви СТАВИ су извршени" -#: src/datastore/datastore_api.c:944 +#: src/datastore/datastore_api.c:1093 msgid "# RESERVE requests executed" msgstr "# захтеви РЕЗЕРВИШИ су извршени" -#: src/datastore/datastore_api.c:1005 +#: src/datastore/datastore_api.c:1158 msgid "# RELEASE RESERVE requests executed" msgstr "# захтеви ОТПУСТИ РЕЗЕРВИШИ су извршени" -#: src/datastore/datastore_api.c:1065 -msgid "# UPDATE requests executed" -msgstr "# захтеви ОСВЕЖИ су извршени" - -#: src/datastore/datastore_api.c:1129 +#: src/datastore/datastore_api.c:1236 msgid "# REMOVE requests executed" msgstr "# захтеви УКЛОНИ су извршени" -#: src/datastore/datastore_api.c:1174 -msgid "Failed to receive response from database.\n" -msgstr "Нисам успео да примим одговор из базе података.\n" - -#: src/datastore/datastore_api.c:1233 -msgid "# Results received" -msgstr "# Резултати су примљени" - -#: src/datastore/datastore_api.c:1300 +#: src/datastore/datastore_api.c:1295 msgid "# GET REPLICATION requests executed" msgstr "# захтеви ДОБАВИ ПРЕСЛИКАНОСТ су изршени" -#: src/datastore/datastore_api.c:1363 +#: src/datastore/datastore_api.c:1357 msgid "# GET ZERO ANONYMITY requests executed" msgstr "# захтеви ДОБАВИ НУЛТУ АНОНИМНОСТ су извршени" -#: src/datastore/datastore_api.c:1424 +#: src/datastore/datastore_api.c:1438 msgid "# GET requests executed" msgstr "# захтеви ДОБАВИ су извршени" -#: src/datastore/gnunet-datastore.c:114 +#: src/datastore/gnunet-datastore.c:187 +#, c-format +msgid "Dumped % records\n" +msgstr "" + +#: src/datastore/gnunet-datastore.c:214 src/datastore/gnunet-datastore.c:226 +#, c-format +msgid "Short write to file: %zd bytes expecting %zd\n" +msgstr "" + +#: src/datastore/gnunet-datastore.c:257 +#, c-format +msgid "Error queueing datastore GET operation\n" +msgstr "" + +#: src/datastore/gnunet-datastore.c:282 src/datastore/gnunet-datastore.c:400 +#, fuzzy, c-format +msgid "Unable to open dump file: %s\n" +msgstr "Не могу да увезем приватни кључ из датотеке „%s“\n" + +#: src/datastore/gnunet-datastore.c:319 #, c-format msgid "Failed to store item: %s, aborting\n" msgstr "Нисам успео да сместим ставку: %s, прекидам\n" -#: src/datastore/gnunet-datastore.c:200 +#: src/datastore/gnunet-datastore.c:331 +#, fuzzy, c-format +msgid "Inserted % records\n" +msgstr "поставља A записе" + +#: src/datastore/gnunet-datastore.c:339 src/datastore/gnunet-datastore.c:353 +#, c-format +msgid "Short read from file: %zd bytes expecting %zd\n" +msgstr "" + +#: src/datastore/gnunet-datastore.c:378 +#, c-format +msgid "Error queueing datastore PUT operation\n" +msgstr "" + +#: src/datastore/gnunet-datastore.c:417 #, c-format -msgid "Cannot use the same configuration for source and destination\n" -msgstr "Не могу да користим исто подешавање за извор и одредиште\n" +msgid "Input file is not of a supported format\n" +msgstr "" + +#: src/datastore/gnunet-datastore.c:442 +#, fuzzy, c-format +msgid "Failed connecting to the datastore.\n" +msgstr "Нисам успео да се повежем са смештајем података." -#: src/datastore/gnunet-datastore.c:246 -msgid "specifies the configuration to use to access an alternative datastore; will merge that datastore into our current datastore" -msgstr "наводи подешавање за коришћење за приступ заменском смештају података; стопиће тај смештај података у наш тренутни смештај података" +#: src/datastore/gnunet-datastore.c:454 +#, fuzzy, c-format +msgid "Please choose at least one operation: %s, %s\n" +msgstr "Изаберите једну радњу : „%s“ или „%s“ или „%s“ или „%s“ или „%s“\n" + +#: src/datastore/gnunet-datastore.c:477 +#, fuzzy +msgid "Dump all records from the datastore" +msgstr "Претражује запис за датим називом" + +#: src/datastore/gnunet-datastore.c:482 +#, fuzzy +msgid "Insert records into the datastore" +msgstr "# бајтови су послати смештају података" + +#: src/datastore/gnunet-datastore.c:487 +msgid "File to dump or insert" +msgstr "" -#: src/datastore/gnunet-datastore.c:255 +#: src/datastore/gnunet-datastore.c:498 msgid "Manipulate GNUnet datastore" msgstr "Манипулише ГНУнет смештајом података" -#: src/datastore/gnunet-service-datastore.c:351 +#: src/datastore/gnunet-service-datastore.c:335 msgid "# bytes expired" msgstr "# бајтови су истекли" -#: src/datastore/gnunet-service-datastore.c:425 +#: src/datastore/gnunet-service-datastore.c:419 msgid "# bytes purged (low-priority)" msgstr "# бајтови су избачени (ниска хитност)" -#: src/datastore/gnunet-service-datastore.c:483 -#: src/gns/gnunet-gns-helper-service-w32.c:223 -msgid "Transmission to client failed!\n" -msgstr "Пренос до клијента није успео!\n" - -#: src/datastore/gnunet-service-datastore.c:514 -#: src/gns/gnunet-gns-helper-service-w32.c:262 -msgid "Shutdown in progress, aborting transmission.\n" -msgstr "Гашење је у току, прекидам пренос.\n" - -#: src/datastore/gnunet-service-datastore.c:630 +#: src/datastore/gnunet-service-datastore.c:551 msgid "# results found" msgstr "# резултати су нађени" -#: src/datastore/gnunet-service-datastore.c:673 -#, c-format -msgid "Insufficient space (%llu bytes are available) to satisfy `%s' request for %llu bytes\n" -msgstr "Недовољно простора (доступних бајтова %llu) за задовољавање „%s“ захтева за %llu бајта\n" +#: src/datastore/gnunet-service-datastore.c:593 +#, fuzzy, c-format +msgid "" +"Insufficient space (%llu bytes are available) to satisfy RESERVE request for " +"%llu bytes\n" +msgstr "" +"Недовољно простора (доступних бајтова %llu) за задовољавање „%s“ захтева за " +"%llu бајта\n" -#: src/datastore/gnunet-service-datastore.c:684 +#: src/datastore/gnunet-service-datastore.c:605 #, c-format -msgid "The requested amount (%llu bytes) is larger than the cache size (%llu bytes)\n" -msgstr "Захтевана количина (%llu бајта) је већа од величине оставе (%llu бајта)\n" +msgid "" +"The requested amount (%llu bytes) is larger than the cache size (%llu " +"bytes)\n" +msgstr "" +"Захтевана количина (%llu бајта) је већа од величине оставе (%llu бајта)\n" -#: src/datastore/gnunet-service-datastore.c:688 -msgid "Insufficient space to satisfy request and requested amount is larger than cache size" -msgstr "Недовољно простора за задовољавање захтева а захтевана количина је већа од величине оставе" +#: src/datastore/gnunet-service-datastore.c:611 +msgid "" +"Insufficient space to satisfy request and requested amount is larger than " +"cache size" +msgstr "" +"Недовољно простора за задовољавање захтева а захтевана количина је већа од " +"величине оставе" -#: src/datastore/gnunet-service-datastore.c:694 +#: src/datastore/gnunet-service-datastore.c:618 msgid "Insufficient space to satisfy request" msgstr "Недовољно простора за задовољавање захтева" -#: src/datastore/gnunet-service-datastore.c:699 -#: src/datastore/gnunet-service-datastore.c:751 -#: src/datastore/gnunet-service-datastore.c:964 -#: src/datastore/gnunet-service-datastore.c:1421 +#: src/datastore/gnunet-service-datastore.c:625 +#: src/datastore/gnunet-service-datastore.c:676 +#: src/datastore/gnunet-service-datastore.c:819 +#: src/datastore/gnunet-service-datastore.c:1428 msgid "# reserved" msgstr "# је резервисано" -#: src/datastore/gnunet-service-datastore.c:764 +#: src/datastore/gnunet-service-datastore.c:692 msgid "Could not find matching reservation" msgstr "Не могу да нађем одговарајућу резервацију" -#: src/datastore/gnunet-service-datastore.c:850 +#: src/datastore/gnunet-service-datastore.c:757 #, c-format msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" -msgstr "Потребна су још %llu бајта простора (%llu је дозвољено, користим %llu)\n" +msgstr "" +"Потребна су још %llu бајта простора (%llu је дозвољено, користим %llu)\n" -#: src/datastore/gnunet-service-datastore.c:1010 +#: src/datastore/gnunet-service-datastore.c:857 msgid "# GET requests received" msgstr "# захтеви ДОБАВИ су примљени" -#: src/datastore/gnunet-service-datastore.c:1022 +#: src/datastore/gnunet-service-datastore.c:887 +#, fuzzy +msgid "# GET KEY requests received" +msgstr "# захтеви ДОБАВИ су примљени" + +#: src/datastore/gnunet-service-datastore.c:898 msgid "# requests filtered by bloomfilter" msgstr "# захтеви су филтрирани блумфилтером" -#: src/datastore/gnunet-service-datastore.c:1050 -msgid "# UPDATE requests received" -msgstr "# захтеви ОСВЕЖИ су примљени" - -#: src/datastore/gnunet-service-datastore.c:1080 +#: src/datastore/gnunet-service-datastore.c:939 msgid "# GET REPLICATION requests received" msgstr "# захтеви ДОБАВИ ПРЕСЛИКАНОСТ су примљени" -#: src/datastore/gnunet-service-datastore.c:1113 +#: src/datastore/gnunet-service-datastore.c:970 msgid "# GET ZERO ANONYMITY requests received" msgstr "# захтеви ДОБАВИ НУЛТУ АНОНИМНОСТ су примљени" -#: src/datastore/gnunet-service-datastore.c:1138 +#: src/datastore/gnunet-service-datastore.c:1011 msgid "Content not found" msgstr "Нисам нашао садржај" -#: src/datastore/gnunet-service-datastore.c:1146 +#: src/datastore/gnunet-service-datastore.c:1018 msgid "# bytes removed (explicit request)" msgstr "# бајта је уклоњено (изричити захтев)" -#: src/datastore/gnunet-service-datastore.c:1178 +#: src/datastore/gnunet-service-datastore.c:1058 msgid "# REMOVE requests received" msgstr "# захтеви УКЛОНИ су уклоњени" -#: src/datastore/gnunet-service-datastore.c:1220 -#, c-format -msgid "Datastore payload inaccurate (%lld < %lld). Trying to fix.\n" -msgstr "Утовар смештаја података није тачан (%lld < %lld). Покушавам да поправим.\n" +#: src/datastore/gnunet-service-datastore.c:1107 +#, fuzzy, c-format +msgid "" +"Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" +msgstr "" +"Утовар смештаја података није тачан (%lld < %lld). Покушавам да поправим.\n" +#: src/datastore/gnunet-service-datastore.c:1112 #: src/datastore/gnunet-service-datastore.c:1281 #, c-format -msgid "Loading `%s' datastore plugin\n" +msgid "New payload: %lld\n" +msgstr "" + +#: src/datastore/gnunet-service-datastore.c:1167 +#, c-format +msgid "Loading `%s' datastore plugin\n" msgstr "Учитавам прикључак „%s“ смештаја података\n" -#: src/datastore/gnunet-service-datastore.c:1290 +#: src/datastore/gnunet-service-datastore.c:1176 #, c-format msgid "Failed to load datastore plugin for `%s'\n" msgstr "Нисам успео да учитам прикључак смештаја података за „%s“\n" -#: src/datastore/gnunet-service-datastore.c:1492 +#: src/datastore/gnunet-service-datastore.c:1236 +msgid "Bloomfilter construction complete.\n" +msgstr "Изградња блумфилтера је завршена.\n" + +#: src/datastore/gnunet-service-datastore.c:1288 +msgid "Rebuilding bloomfilter. Please be patient.\n" +msgstr "Поново градим блумфилтер. Будите стрпљиви.\n" + +#: src/datastore/gnunet-service-datastore.c:1298 +msgid "Plugin does not support get_keys function. Please fix!\n" +msgstr "Прикључак не подржава функцију „get_keys“. Поправите то!\n" + +#: src/datastore/gnunet-service-datastore.c:1463 #, c-format msgid "# bytes used in file-sharing datastore `%s'" msgstr "# бајтови су коришћени у смештају података дељења датотека „%s“" -#: src/datastore/gnunet-service-datastore.c:1503 +#: src/datastore/gnunet-service-datastore.c:1472 msgid "# quota" msgstr "# квота" -#: src/datastore/gnunet-service-datastore.c:1505 +#: src/datastore/gnunet-service-datastore.c:1475 msgid "# cache size" msgstr "# величина кеша" -#: src/datastore/gnunet-service-datastore.c:1518 +#: src/datastore/gnunet-service-datastore.c:1491 #, c-format msgid "Could not use specified filename `%s' for bloomfilter.\n" msgstr "Не могу да користим наведени назив датотеке „%s“ за блумфилтер.\n" -#: src/datastore/gnunet-service-datastore.c:1536 -#: src/datastore/gnunet-service-datastore.c:1552 +#: src/datastore/gnunet-service-datastore.c:1512 +#: src/datastore/gnunet-service-datastore.c:1534 #, c-format msgid "Failed to remove bogus bloomfilter file `%s'\n" msgstr "Нисам успео да уклоним лажну датотеку блумфилтера „%s“\n" -#: src/datastore/gnunet-service-datastore.c:1582 +#: src/datastore/gnunet-service-datastore.c:1573 msgid "Failed to initialize bloomfilter.\n" msgstr "Нисам успео да покренем блумфилтер.\n" -#: src/datastore/gnunet-service-datastore.c:1611 -msgid "Rebuilding bloomfilter. Please be patient.\n" -msgstr "Поново градим блумфилтер. Будите стрпљиви.\n" - -#: src/datastore/gnunet-service-datastore.c:1616 -msgid "Plugin does not support get_keys function. Please fix!\n" -msgstr "Прикључак не подржава функцију „get_keys“. Поправите то!\n" - -#: src/datastore/gnunet-service-datastore.c:1619 -msgid "Bloomfilter construction complete.\n" -msgstr "Изградња блумфилтера је завршена.\n" - -#: src/datastore/plugin_datastore_heap.c:820 +#: src/datastore/plugin_datastore_heap.c:895 msgid "Heap database running\n" msgstr "База података скупине ради\n" -#: src/datastore/plugin_datastore_mysql.c:783 -#, c-format -msgid "Failed to prepare statement `%s'\n" -msgstr "Нисам успео да припремим стање „%s“\n" +#: src/datastore/plugin_datastore_mysql.c:371 +#: src/datastore/plugin_datastore_mysql.c:423 +#: src/datastore/plugin_datastore_mysql.c:1071 +msgid "MySQL statement run failure" +msgstr "" -#: src/datastore/plugin_datastore_mysql.c:791 +#: src/datastore/plugin_datastore_mysql.c:410 +#: src/datastore/plugin_datastore_sqlite.c:674 +#, fuzzy +msgid "Data too large" +msgstr "Вредност је превелика.\n" + +#: src/datastore/plugin_datastore_mysql.c:847 #, c-format msgid "`%s' for `%s' failed at %s:%d with error: %s\n" msgstr "„%s“ за „%s“ није успело на %s:%d са грешком: %s\n" -#: src/datastore/plugin_datastore_mysql.c:1022 +#: src/datastore/plugin_datastore_mysql.c:1179 msgid "Mysql database running\n" msgstr "База података Мајскула ради\n" -#: src/datastore/plugin_datastore_postgres.c:824 +#: src/datastore/plugin_datastore_postgres.c:284 +#: src/datastore/plugin_datastore_postgres.c:897 +msgid "Postgress exec failure" +msgstr "" + +#: src/datastore/plugin_datastore_postgres.c:858 msgid "Failed to drop table from database.\n" msgstr "Нисам успео да избацим табелу из базе података.\n" -#: src/datastore/plugin_datastore_postgres.c:860 -#: src/namecache/plugin_namecache_postgres.c:414 -#: src/namestore/plugin_namestore_postgres.c:569 +#: src/datastore/plugin_datastore_postgres.c:956 msgid "Postgres database running\n" msgstr "База података Постгреса ради\n" -#: src/datastore/plugin_datastore_sqlite.c:57 -#: src/testbed/generate-underlay-topology.c:50 -#: src/testbed/gnunet-daemon-latency-logger.c:55 -#: src/testbed/gnunet-daemon-testbed-underlay.c:58 +#: src/datastore/plugin_datastore_sqlite.c:87 +#: src/testbed/generate-underlay-topology.c:55 +#: src/testbed/gnunet-daemon-latency-logger.c:56 +#: src/testbed/gnunet-daemon-testbed-underlay.c:60 #, c-format msgid "`%s' failed at %s:%u with error: %s" msgstr "„%s“ није успело на %s:%u са грешком: %s" -#: src/datastore/plugin_datastore_sqlite.c:255 -#: src/namecache/plugin_namecache_sqlite.c:193 -#: src/namestore/plugin_namestore_sqlite.c:204 -#: src/psycstore/plugin_psycstore_sqlite.c:319 +#: src/datastore/plugin_datastore_sqlite.c:310 +#: src/namecache/plugin_namecache_sqlite.c:180 +#: src/namestore/plugin_namestore_sqlite.c:213 +#: src/peerstore/plugin_peerstore_sqlite.c:540 #, c-format msgid "Unable to initialize SQLite: %s.\n" msgstr "Не могу да покренем СКуЛајт: %s.\n" -#: src/datastore/plugin_datastore_sqlite.c:663 -msgid "Invalid data in database. Trying to fix (by deletion).\n" -msgstr "Неисправан податак у бази података. Покушавам да поправим (брисањем).\n" +#: src/datastore/plugin_datastore_sqlite.c:633 +msgid "sqlite bind failure" +msgstr "" -#: src/datastore/plugin_datastore_sqlite.c:1156 +#: src/datastore/plugin_datastore_sqlite.c:1251 msgid "sqlite version to old to determine size, assuming zero\n" msgstr "скулајт издање је престаро за одређивање величине, подразумевам нулу\n" -#: src/datastore/plugin_datastore_sqlite.c:1175 +#: src/datastore/plugin_datastore_sqlite.c:1274 #, c-format -msgid "Using sqlite page utilization to estimate payload (%llu pages of size %llu bytes)\n" -msgstr "Користим страницу коришћења скулајта да проценим утовар (%llu странице величине %llu бајта)\n" +msgid "" +"Using sqlite page utilization to estimate payload (%llu pages of size %llu " +"bytes)\n" +msgstr "" +"Користим страницу коришћења скулајта да проценим утовар (%llu странице " +"величине %llu бајта)\n" -#: src/datastore/plugin_datastore_sqlite.c:1215 -#: src/namecache/plugin_namecache_sqlite.c:583 -#: src/namestore/plugin_namestore_sqlite.c:719 +#: src/datastore/plugin_datastore_sqlite.c:1316 +#: src/namecache/plugin_namecache_sqlite.c:564 +#: src/namestore/plugin_namestore_sqlite.c:765 msgid "Sqlite database running\n" msgstr "База података Скулајта ради\n" -#: src/datastore/plugin_datastore_template.c:257 +#: src/datastore/plugin_datastore_template.c:252 msgid "Template database running\n" msgstr "База података шаблона ради\n" -#: src/dht/dht_api.c:376 -msgid "Failed to connect to the DHT service!\n" -msgstr "Нисам успео да се повежем са „DHT“ услугом!\n" - -#: src/dht/gnunet-dht-get.c:133 +#: src/dht/gnunet-dht-get.c:158 #, c-format msgid "" "Result %d, type %d:\n" @@ -1709,1249 +2029,1133 @@ msgstr "" "%.*s\n" #: src/dht/gnunet-dht-get.c:159 +#, fuzzy, c-format +msgid "Result %d, type %d:\n" +msgstr "" +"Резултат %d, врста %d:\n" +"%.*s\n" + +#: src/dht/gnunet-dht-get.c:197 msgid "Must provide key for DHT GET!\n" msgstr "Морате доставити кључ за ДХТ ДОБАВИ!\n" -#: src/dht/gnunet-dht-get.c:165 src/dht/gnunet-dht-monitor.c:225 +#: src/dht/gnunet-dht-get.c:203 src/dht/gnunet-dht-monitor.c:255 msgid "Failed to connect to DHT service!\n" msgstr "Нисам успео да се повежем са „DHT“ услугом!\n" -#: src/dht/gnunet-dht-get.c:173 -msgid "Issueing DHT GET with key" +#: src/dht/gnunet-dht-get.c:213 +#, fuzzy +msgid "Issuing DHT GET with key" msgstr "Издајем ДХТ ДОБАВИ са кључем" -#: src/dht/gnunet-dht-get.c:189 src/dht/gnunet-dht-monitor.c:262 +#: src/dht/gnunet-dht-get.c:245 src/dht/gnunet-dht-monitor.c:302 #: src/dht/gnunet-dht-put.c:198 msgid "the query key" msgstr "кључ упита" -#: src/dht/gnunet-dht-get.c:192 +#: src/dht/gnunet-dht-get.c:251 msgid "how many parallel requests (replicas) to create" msgstr "колико паралелних захтева (реплика) да направи" -#: src/dht/gnunet-dht-get.c:195 src/dht/gnunet-dht-monitor.c:265 +#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:308 msgid "the type of data to look for" msgstr "врста података за тражење" -#: src/dht/gnunet-dht-get.c:198 src/dht/gnunet-dht-put.c:210 +#: src/dht/gnunet-dht-get.c:262 msgid "how long to execute this query before giving up?" msgstr "колико дуго да извршава овај упит пре одустајања?" -#: src/dht/gnunet-dht-get.c:201 src/dht/gnunet-dht-put.c:201 +#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:203 msgid "use DHT's demultiplex everywhere option" msgstr "користи опцију ДХТ-а демултиплексирај свуда" -#: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271 -#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 -#: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:877 -#: src/fs/gnunet-search.c:301 src/fs/gnunet-unindex.c:168 -#: src/nse/gnunet-nse-profiler.c:873 -msgid "be verbose (print progress information)" -msgstr "бива опширан (исписује податке напредовања)" - -#: src/dht/gnunet-dht-get.c:225 +#: src/dht/gnunet-dht-get.c:281 msgid "Issue a GET request to the GNUnet DHT, prints results." msgstr "Издаје ДОБАВИ захтев ГНУнет ДХТ-у, исписује резултате." -#: src/dht/gnunet-dht-monitor.c:268 +#: src/dht/gnunet-dht-monitor.c:315 msgid "how long should the monitor command run" msgstr "колико дуго треба да ради наредба праћења" -#: src/dht/gnunet-dht-monitor.c:293 +#: src/dht/gnunet-dht-monitor.c:321 src/fs/gnunet-download.c:359 +#: src/nse/gnunet-nse-profiler.c:894 +msgid "be verbose (print progress information)" +msgstr "бива опширан (исписује податке напредовања)" + +#: src/dht/gnunet-dht-monitor.c:336 msgid "Prints all packets that go through the DHT." msgstr "Исписује све пакете који иду кроз „DHT“." -#: src/dht/gnunet-dht-put.c:118 -msgid "PUT request sent with key" -msgstr "СТАВИ захтев је послат са кључем" +#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 +#, c-format +msgid "Exiting as the number of peers is %u\n" +msgstr "Излазим јер је број парњака %u\n" + +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +#, fuzzy +msgid "number of peers to start" +msgstr "број парњака у концензусу" + +#: src/dht/gnunet_dht_profiler.c:961 +#, fuzzy +msgid "number of PUTs to perform per peer" +msgstr "број битова за тражење доказивања о раду" + +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "назив датотеке са подацима пријављивања за пробно место" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" -#: src/dht/gnunet-dht-put.c:121 -msgid "Timeout sending PUT request!\n" -msgstr "Истекло је време слања СТАВИ захтева!\n" +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" -#: src/dht/gnunet-dht-put.c:124 -msgid "PUT request not confirmed!\n" -msgstr "Захтев СТАВИ није потврђен!\n" +#: src/dht/gnunet_dht_profiler.c:1023 +#, fuzzy +msgid "Measure quality and performance of the DHT service." +msgstr "Мери квалитет и учинковитост НСЕ услуге." -#: src/dht/gnunet-dht-put.c:153 +#: src/dht/gnunet-dht-put.c:133 msgid "Must provide KEY and DATA for DHT put!\n" msgstr "Морате доставити КЉУЧ и ПОДАЦИ за ДХТ стављање!\n" -#: src/dht/gnunet-dht-put.c:160 -#, c-format -msgid "Could not connect to %s service!\n" +#: src/dht/gnunet-dht-put.c:140 +#, fuzzy, c-format +msgid "Could not connect to DHT service!\n" msgstr "Не могу да се повежем са „%s“ услугом!\n" -#: src/dht/gnunet-dht-put.c:176 +#: src/dht/gnunet-dht-put.c:151 #, c-format msgid "Issuing put request for `%s' with data `%s'!\n" msgstr "Издајем захтев стављања за „%s“ са подацима „%s“!\n" -#: src/dht/gnunet-dht-put.c:192 +#: src/dht/gnunet-dht-put.c:187 msgid "the data to insert under the key" msgstr "подаци за уметање под кључем" -#: src/dht/gnunet-dht-put.c:195 +#: src/dht/gnunet-dht-put.c:193 msgid "how long to store this entry in the dht (in seconds)" msgstr "колико ће дуго да држи овај унос у дхт-у (у секундама)" -#: src/dht/gnunet-dht-put.c:204 +#: src/dht/gnunet-dht-put.c:208 msgid "how many replicas to create" msgstr "број реплика за стварање" -#: src/dht/gnunet-dht-put.c:207 +#: src/dht/gnunet-dht-put.c:212 +#, fuzzy +msgid "use DHT's record route option" +msgstr "користи опцију ДХТ-а демултиплексирај свуда" + +#: src/dht/gnunet-dht-put.c:217 msgid "the type to insert data as" msgstr "врста за уметање података" -#: src/dht/gnunet-dht-put.c:236 +#: src/dht/gnunet-dht-put.c:232 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." msgstr "Издаје захтев СТАВИ у ГНУнет ДХТ уметак ПОДАТАКА под КЉУЧЕМ." -#: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:176 -msgid "Failed to connect to transport service!\n" -msgstr "Нисам успео да се повежем са услугом преноса!\n" - -#: src/dht/gnunet-service-dht_clients.c:417 -#: src/dht/gnunet-service-xdht_clients.c:838 +#: src/dht/gnunet-service-dht_clients.c:367 msgid "# GET requests from clients injected" msgstr "# захтеви ДОБАВИ од клијената су убризгани" -#: src/dht/gnunet-service-dht_clients.c:513 -#: src/dht/gnunet-service-xdht_clients.c:927 +#: src/dht/gnunet-service-dht_clients.c:483 msgid "# PUT requests received from clients" msgstr "# захтеви СТАВИ су примљени од клијената" -#: src/dht/gnunet-service-dht_clients.c:597 -#: src/dht/gnunet-service-xdht_clients.c:1013 +#: src/dht/gnunet-service-dht_clients.c:616 msgid "# GET requests received from clients" msgstr "# захтеви ДОБАВИ су примљени од клијената" -#: src/dht/gnunet-service-dht_clients.c:798 -#: src/dht/gnunet-service-xdht_clients.c:1214 +#: src/dht/gnunet-service-dht_clients.c:848 msgid "# GET STOP requests received from clients" msgstr "# захтеви ДОБАВИ СТОП су примљени од клијената" -#: src/dht/gnunet-service-dht_clients.c:1039 -#: src/dht/gnunet-service-xdht_clients.c:498 +#: src/dht/gnunet-service-dht_clients.c:1033 msgid "# Key match, type mismatches in REPLY to CLIENT" msgstr "# Кључ се поклапа, врсте се не поклапају у ОДГОВОР КЛИЈНЕТУ" -#: src/dht/gnunet-service-dht_clients.c:1052 -#: src/dht/gnunet-service-xdht_clients.c:511 +#: src/dht/gnunet-service-dht_clients.c:1049 msgid "# Duplicate REPLIES to CLIENT request dropped" msgstr "# Двоструки захтев ОДГОВОРИ КЛИЈЕНТУ је одбачен" -#: src/dht/gnunet-service-dht_clients.c:1089 -#: src/dht/gnunet-service-xdht_clients.c:548 +#: src/dht/gnunet-service-dht_clients.c:1102 #, c-format msgid "Unsupported block type (%u) in request!\n" msgstr "Неподржана врста блока (%u) у захтеву!\n" -#: src/dht/gnunet-service-dht_clients.c:1112 -#: src/dht/gnunet-service-xdht_clients.c:571 +#: src/dht/gnunet-service-dht_clients.c:1110 msgid "# RESULTS queued for clients" msgstr "# РЕЗУЛТАТИ су стављени у ред за клијенте" -#: src/dht/gnunet-service-dht_clients.c:1166 -#: src/dht/gnunet-service-dht_clients.c:1209 -#: src/dht/gnunet-service-xdht_clients.c:625 -#: src/dht/gnunet-service-xdht_clients.c:668 +#: src/dht/gnunet-service-dht_clients.c:1191 msgid "# REPLIES ignored for CLIENTS (no match)" msgstr "# ОДГОВОРИ су занемарени за КЛИЈЕНТЕ (нема поклапања)" -#: src/dht/gnunet-service-dht_clients.c:1176 -#: src/dht/gnunet-service-xdht_clients.c:635 -msgid "Could not pass reply to client, message too big!\n" -msgstr "Не могу да проследим одговор клијенту, порука је превелика!\n" - -#: src/dht/gnunet-service-dht_datacache.c:68 -#: src/dht/gnunet-service-xdht_datacache.c:68 +#: src/dht/gnunet-service-dht_datacache.c:73 #, c-format msgid "%s request received, but have no datacache!\n" msgstr "„%s“ захтев је примљен, али нема оставу података!\n" -#: src/dht/gnunet-service-dht_datacache.c:78 -#: src/dht/gnunet-service-xdht_datacache.c:78 +#: src/dht/gnunet-service-dht_datacache.c:83 msgid "# ITEMS stored in datacache" msgstr "# СТАВКЕ су смештене у оставу података" -#: src/dht/gnunet-service-dht_datacache.c:165 -#: src/dht/gnunet-service-xdht_datacache.c:165 +#: src/dht/gnunet-service-dht_datacache.c:206 msgid "# Good RESULTS found in datacache" msgstr "# Добри РЕЗУЛТАТИ су нађени у остави података" -#: src/dht/gnunet-service-dht_datacache.c:176 -#: src/dht/gnunet-service-xdht_datacache.c:176 +#: src/dht/gnunet-service-dht_datacache.c:220 msgid "# Duplicate RESULTS found in datacache" msgstr "# Двоструки РЕЗУЛТАТИ су нађени у остави података" -#: src/dht/gnunet-service-dht_datacache.c:182 -#: src/dht/gnunet-service-xdht_datacache.c:182 +#: src/dht/gnunet-service-dht_datacache.c:228 msgid "# Invalid RESULTS found in datacache" msgstr "# Неисправни РЕЗУЛТАТИ су нађени у остави података" -#: src/dht/gnunet-service-dht_datacache.c:188 -#: src/dht/gnunet-service-xdht_datacache.c:188 +#: src/dht/gnunet-service-dht_datacache.c:236 msgid "# Irrelevant RESULTS found in datacache" msgstr "# Неважни РЕЗУЛТАТИ су нађени у остави података" -#: src/dht/gnunet-service-dht_datacache.c:200 -#: src/dht/gnunet-service-xdht_datacache.c:200 +#: src/dht/gnunet-service-dht_datacache.c:252 msgid "# Unsupported RESULTS found in datacache" msgstr "# Неподржани РЕЗУЛТАТИ су нађени у остави података" -#: src/dht/gnunet-service-dht_datacache.c:203 -#: src/dht/gnunet-service-xdht_datacache.c:203 +#: src/dht/gnunet-service-dht_datacache.c:256 #, c-format msgid "Unsupported block type (%u) in local response!\n" msgstr "Неподржана врста блока (%u) у локалном одговору!\n" -#: src/dht/gnunet-service-dht_datacache.c:234 -#: src/dht/gnunet-service-xdht_datacache.c:234 +#: src/dht/gnunet-service-dht_datacache.c:291 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:86 msgid "# HELLOs obtained from peerinfo" msgstr "# „HELLO“-и су добијени из података парњака" -#: src/dht/gnunet-service-dht_neighbours.c:516 -msgid "# Preference updates given to core" -msgstr "# Ажурирања поставки су дата језгру" - -#: src/dht/gnunet-service-dht_neighbours.c:610 +#: src/dht/gnunet-service-dht_neighbours.c:678 msgid "# FIND PEER messages initiated" msgstr "# НАЂИ ПАРЊАКА поруке су покренуте" -#: src/dht/gnunet-service-dht_neighbours.c:764 -msgid "# Queued messages discarded (peer disconnected)" -msgstr "# Поруке из реда су одбачене (парњак је ископчан)" - -#: src/dht/gnunet-service-dht_neighbours.c:819 -#: src/dht/gnunet-service-xdht_neighbours.c:703 -msgid "# Bytes transmitted to other peers" -msgstr "# Бајтови су пренесени другим парњацима" - -#: src/dht/gnunet-service-dht_neighbours.c:857 -#: src/dht/gnunet-service-xdht_neighbours.c:742 -msgid "# Bytes of bandwidth requested from core" -msgstr "# Бајтови пропусног опсега које захтева језгро" - -#: src/dht/gnunet-service-dht_neighbours.c:889 +#: src/dht/gnunet-service-dht_neighbours.c:851 msgid "# requests TTL-dropped" msgstr "# захтеви ТТЛ су одбачени" -#: src/dht/gnunet-service-dht_neighbours.c:1093 -#: src/dht/gnunet-service-dht_neighbours.c:1130 +#: src/dht/gnunet-service-dht_neighbours.c:1052 +#: src/dht/gnunet-service-dht_neighbours.c:1096 msgid "# Peers excluded from routing due to Bloomfilter" msgstr "# Парњаци су изузети из рутирања због Блумфилтера" -#: src/dht/gnunet-service-dht_neighbours.c:1108 -#: src/dht/gnunet-service-dht_neighbours.c:1145 +#: src/dht/gnunet-service-dht_neighbours.c:1069 +#: src/dht/gnunet-service-dht_neighbours.c:1112 msgid "# Peer selection failed" msgstr "# Бирање парњака није успело" -#: src/dht/gnunet-service-dht_neighbours.c:1287 +#: src/dht/gnunet-service-dht_neighbours.c:1270 msgid "# PUT requests routed" msgstr "# захтеви СТАВИ су рутирани" -#: src/dht/gnunet-service-dht_neighbours.c:1316 +#: src/dht/gnunet-service-dht_neighbours.c:1304 msgid "# PUT messages queued for transmission" msgstr "# СТАВИ поруке су у реду за пренос" -#: src/dht/gnunet-service-dht_neighbours.c:1323 -#: src/dht/gnunet-service-dht_neighbours.c:1440 -#: src/dht/gnunet-service-dht_neighbours.c:1543 -#: src/dht/gnunet-service-xdht_neighbours.c:794 -#: src/dht/gnunet-service-xdht_neighbours.c:860 -#: src/dht/gnunet-service-xdht_neighbours.c:919 -#: src/dht/gnunet-service-xdht_neighbours.c:981 -#: src/dht/gnunet-service-xdht_neighbours.c:1041 +#: src/dht/gnunet-service-dht_neighbours.c:1316 +#: src/dht/gnunet-service-dht_neighbours.c:1458 +#: src/dht/gnunet-service-dht_neighbours.c:1562 msgid "# P2P messages dropped due to full queue" msgstr "# П2П поруке су одбачене због пуног реда" -#: src/dht/gnunet-service-dht_neighbours.c:1405 +#: src/dht/gnunet-service-dht_neighbours.c:1401 msgid "# GET requests routed" msgstr "# захтеви ДОБАВИ су рутирани" -#: src/dht/gnunet-service-dht_neighbours.c:1432 +#: src/dht/gnunet-service-dht_neighbours.c:1445 msgid "# GET messages queued for transmission" msgstr "# ДОБАВИ поруке су у реду за пренос" -#: src/dht/gnunet-service-dht_neighbours.c:1550 +#: src/dht/gnunet-service-dht_neighbours.c:1577 msgid "# RESULT messages queued for transmission" msgstr "# РЕЗУЛТАТ поруке су у реду за пренос" -#: src/dht/gnunet-service-dht_neighbours.c:1636 +#: src/dht/gnunet-service-dht_neighbours.c:1680 +#, fuzzy +msgid "# Expired PUTs discarded" +msgstr "# небитни одговори су одбачени" + +#: src/dht/gnunet-service-dht_neighbours.c:1688 msgid "# P2P PUT requests received" msgstr "# захтеви П2П СТАВИ су примљени" -#: src/dht/gnunet-service-dht_neighbours.c:1639 +#: src/dht/gnunet-service-dht_neighbours.c:1692 msgid "# P2P PUT bytes received" msgstr "# бајтови П2П СТАВИ су примљени" -#: src/dht/gnunet-service-dht_neighbours.c:1803 +#: src/dht/gnunet-service-dht_neighbours.c:1924 msgid "# FIND PEER requests ignored due to Bloomfilter" msgstr "# захтеви НАЂИ ПАРЊАКА су занемарени због Блумфилтера" -#: src/dht/gnunet-service-dht_neighbours.c:1811 +#: src/dht/gnunet-service-dht_neighbours.c:1933 msgid "# FIND PEER requests ignored due to lack of HELLO" msgstr "# захтеви НАЂИ ПАРЊАКА су занемарени због недостатка „HELLO“-а" -#: src/dht/gnunet-service-dht_neighbours.c:1904 +#: src/dht/gnunet-service-dht_neighbours.c:2096 msgid "# P2P GET requests received" msgstr "# захтеви П2П ДОБАВИ су примљени" -#: src/dht/gnunet-service-dht_neighbours.c:1907 +#: src/dht/gnunet-service-dht_neighbours.c:2100 msgid "# P2P GET bytes received" msgstr "# бајтови П2П ДОБАВИ су примљени" -#: src/dht/gnunet-service-dht_neighbours.c:1961 +#: src/dht/gnunet-service-dht_neighbours.c:2166 msgid "# P2P FIND PEER requests processed" msgstr "# захтеви П2П НАЂИ ПАРЊАКА су обрађени" -#: src/dht/gnunet-service-dht_neighbours.c:1975 +#: src/dht/gnunet-service-dht_neighbours.c:2187 msgid "# P2P GET requests ONLY routed" msgstr "# захтеви П2П ДОБАВИ су САМО рутирани" -#: src/dht/gnunet-service-dht_neighbours.c:2052 +#: src/dht/gnunet-service-dht_neighbours.c:2365 +#, fuzzy +msgid "# Expired results discarded" +msgstr "# небитни одговори су одбачени" + +#: src/dht/gnunet-service-dht_neighbours.c:2382 msgid "# P2P RESULTS received" msgstr "# П2П РЕЗУЛТАТИ су примљени" -#: src/dht/gnunet-service-dht_neighbours.c:2055 +#: src/dht/gnunet-service-dht_neighbours.c:2386 msgid "# P2P RESULT bytes received" msgstr "# бајтови П2П РЕЗУЛТАТ су примљени" -#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-xdht_nse.c:59 +#: src/dht/gnunet-service-dht_nse.c:59 msgid "# Network size estimates received" msgstr "# Процене величине мреже су примљене" -#: src/dht/gnunet-service-dht_routing.c:211 +#: src/dht/gnunet-service-dht_routing.c:220 msgid "# Good REPLIES matched against routing table" msgstr "# Добри ОДГОВОРИ су поклопљени наспрам табеле рутирања" -#: src/dht/gnunet-service-dht_routing.c:220 +#: src/dht/gnunet-service-dht_routing.c:236 msgid "# Duplicate REPLIES matched against routing table" msgstr "# Двоструки ОДГОВОРИ су поклопљени наспрам табеле рутирања" -#: src/dht/gnunet-service-dht_routing.c:226 +#: src/dht/gnunet-service-dht_routing.c:244 msgid "# Invalid REPLIES matched against routing table" msgstr "# Неисправни ОДГОВОРИ су поклопљени наспрам табеле рутирања" -#: src/dht/gnunet-service-dht_routing.c:232 +#: src/dht/gnunet-service-dht_routing.c:252 msgid "# Irrelevant REPLIES matched against routing table" msgstr "# Неважни ОДГОВОРИ су поклопљени наспрам табеле рутирања" -#: src/dht/gnunet-service-dht_routing.c:244 +#: src/dht/gnunet-service-dht_routing.c:268 msgid "# Unsupported REPLIES matched against routing table" msgstr "# Неподржани ОДГОВОРИ су поклопљени наспрам табеле рутирања" -#: src/dht/gnunet-service-dht_routing.c:317 +#: src/dht/gnunet-service-dht_routing.c:347 msgid "# Entries removed from routing table" msgstr "# Уноси су уклоњени из табеле рутирања" -#: src/dht/gnunet-service-dht_routing.c:399 +#: src/dht/gnunet-service-dht_routing.c:422 msgid "# Entries added to routing table" msgstr "# Уноси су додати у табелу рутирања" -#: src/dht/gnunet-service-dht_routing.c:417 +#: src/dht/gnunet-service-dht_routing.c:444 msgid "# DHT requests combined" msgstr "# ДХТ захтеви су комбиновани" -#: src/dht/gnunet-service-xdht_neighbours.c:1398 -#, c-format -msgid "" -"\n" -"SUPU %s, %s, %d,my_identity = %s" -msgstr "" -"\n" -"SUPU %s, %s, %d,my_identity = %s" - -#: src/dht/gnunet-service-xdht_neighbours.c:1514 -#: src/dht/gnunet-service-xdht_neighbours.c:1524 -#: src/dht/gnunet-service-xdht_neighbours.c:1530 -#: src/dht/gnunet-service-xdht_neighbours.c:1536 -#: src/dht/gnunet-service-xdht_neighbours.c:1545 -#, c-format -msgid "" -"\n" -"SUPU %s, %s, %d" -msgstr "" -"\n" -"SUPU %s, %s, %d" - -#: src/dht/plugin_block_dht.c:138 +#: src/dht/plugin_block_dht.c:189 #, c-format msgid "Block not of type %u\n" msgstr "Блок није врсте %u\n" -#: src/dht/plugin_block_dht.c:145 -msgid "Size mismatch for block\n" +#: src/dht/plugin_block_dht.c:198 +#, fuzzy, c-format +msgid "Size mismatch for block with type %u\n" msgstr "Величин не одговара за блок\n" -#: src/dht/plugin_block_dht.c:155 +#: src/dht/plugin_block_dht.c:209 #, c-format msgid "Block of type %u is malformed\n" msgstr "Блок врсте %u је лош\n" -#: src/dns/dnsparser.c:257 -#, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "Нисам успео да претворим ДНС ИДНА „%s“ у УТФ-8: %s\n" - -#: src/dns/dnsparser.c:856 -#, c-format -msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n" -msgstr "Нисам успео да претворим УТФ-8 назив „%s“ у ДНС ИДНА формат: %s\n" - -#: src/dns/dnsstub.c:175 -#, c-format -msgid "Could not bind to any port: %s\n" -msgstr "Не могу да се вежем ни за један прикључник: %s\n" - -#: src/dns/dnsstub.c:295 src/dns/dnsstub.c:383 -#, c-format -msgid "Failed to send DNS request to %s\n" -msgstr "Нисам успео да пошаљем ДНС захтев за %s\n" - -#: src/dns/dnsstub.c:299 -#, c-format -msgid "Sent DNS request to %s\n" -msgstr "Послао сам ДНС захтев за %s\n" - -#: src/dns/dnsstub.c:368 -#, c-format -msgid "Configured DNS exit `%s' is not working / valid.\n" -msgstr "Подешени ДНС излаз „%s“ не ради / није исправан.\n" - -#: src/dns/dnsstub.c:440 -#, c-format -msgid "Received DNS response that is too small (%u bytes)" -msgstr "Примих ДНС одговор који је премали (%u бајта)" - -#: src/dns/gnunet-dns-monitor.c:355 +#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 msgid "only monitor DNS queries" msgstr "само надгледа ДНС упите" -#: src/dns/gnunet-dns-monitor.c:358 -msgid "only monitor DNS replies" -msgstr "само надгледа ДНС одговоре" - -#: src/dns/gnunet-dns-monitor.c:369 +#: src/dns/gnunet-dns-monitor.c:388 msgid "Monitor DNS queries." msgstr "Надгледа ДНС упите." -#: src/dns/gnunet-dns-redirector.c:236 +#: src/dns/gnunet-dns-redirector.c:241 msgid "set A records" msgstr "поставља A записе" -#: src/dns/gnunet-dns-redirector.c:239 +#: src/dns/gnunet-dns-redirector.c:247 msgid "set AAAA records" msgstr "поставља AAAA записе" -#: src/dns/gnunet-dns-redirector.c:251 +#: src/dns/gnunet-dns-redirector.c:260 msgid "Change DNS replies to point elsewhere." msgstr "Мења ДНС одговоре да показују негде другде." -#: src/dns/gnunet-service-dns.c:456 +#: src/dns/gnunet-service-dns.c:466 msgid "# DNS requests answered via TUN interface" msgstr "# на ДНС захтеве је одговорено путем ТУН сучеља" -#: src/dns/gnunet-service-dns.c:603 +#: src/dns/gnunet-service-dns.c:620 msgid "# DNS exit failed (failed to open socket)" msgstr "# ДНС излаз није успео (нисам успео да отворим прикључницу)" -#: src/dns/gnunet-service-dns.c:714 +#: src/dns/gnunet-service-dns.c:756 msgid "# External DNS response discarded (no matching request)" msgstr "# Спољни ДНС одговор је одбачен (нема одговарајућег захтева)" -#: src/dns/gnunet-service-dns.c:792 +#: src/dns/gnunet-service-dns.c:832 msgid "# Client response discarded (no matching request)" msgstr "# Одговор клијента је одбачен (нема одговарајућег захтева)" -#: src/dns/gnunet-service-dns.c:907 +#: src/dns/gnunet-service-dns.c:954 msgid "Received malformed IPv4-UDP packet on TUN interface.\n" msgstr "Примих лош ИПв4-УДП пакет на ТУН сучељу.\n" -#: src/dns/gnunet-service-dns.c:923 +#: src/dns/gnunet-service-dns.c:973 msgid "Received malformed IPv6-UDP packet on TUN interface.\n" msgstr "Примих лош ИПв6-УДП пакет на ТУН сучељу.\n" -#: src/dns/gnunet-service-dns.c:932 +#: src/dns/gnunet-service-dns.c:984 #, c-format msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" msgstr "Добих не-ИП пакет са %u бајта и протокол %u са ТУН-а\n" -#: src/dns/gnunet-service-dns.c:942 +#: src/dns/gnunet-service-dns.c:996 +msgid "DNS interceptor got non-DNS packet (dropped)\n" +msgstr "" + +#: src/dns/gnunet-service-dns.c:999 msgid "# Non-DNS UDP packet received via TUN interface" msgstr "# Не-ДНС УДП пакет је примљен путем ТУН сучеља" -#: src/dns/gnunet-service-dns.c:1009 +#: src/dns/gnunet-service-dns.c:1069 msgid "# DNS requests received via TUN interface" msgstr "# ДНС захтеви су примљени путем ТУН сучеља" -#: src/dns/gnunet-service-dns.c:1049 src/exit/gnunet-daemon-exit.c:3514 -#, c-format -msgid "`%s' must be installed SUID, refusing to run\n" -msgstr "„%s“ мора бити инсталиран СУИБ, одбијам да радим\n" - -#: src/dns/gnunet-service-dns.c:1069 src/exit/gnunet-daemon-exit.c:3571 +#: src/dns/gnunet-service-dns.c:1117 src/exit/gnunet-daemon-exit.c:3708 msgid "need a valid IPv4 or IPv6 address\n" msgstr "потребна је исправна ИПв4 или ИПв6 адреса\n" -#: src/dv/gnunet-dv.c:169 -msgid "verbose output" -msgstr "опширан излаз" +#: src/dns/gnunet-service-dns.c:1128 +#, c-format +msgid "`%s' is not SUID or the path is invalid, will not run DNS interceptor\n" +msgstr "" -#: src/dv/gnunet-dv.c:178 -msgid "Print information about DV state" -msgstr "Исписује податке о ДВ стању" +#: src/exit/gnunet-daemon-exit.c:971 +msgid "# TCP packets sent via TUN" +msgstr "# ТЦП пакети су послати путем ТУН-а" -#: src/exit/gnunet-daemon-exit.c:802 -#, c-format -msgid "Got duplicate service records for `%s:%u'\n" -msgstr "Добих двоструке записе услуге за `%s:%u'\n" +#: src/exit/gnunet-daemon-exit.c:1077 +msgid "# ICMP packets sent via TUN" +msgstr "# ICMP пакети су послати путем TUN-а" -#: src/exit/gnunet-daemon-exit.c:853 -msgid "# Bytes transmitted via mesh channels" -msgstr "# Бајтови су пренесени путем меш канала" +#: src/exit/gnunet-daemon-exit.c:1371 +msgid "# UDP packets sent via TUN" +msgstr "# UDP пакети су послати путем TUN-а" + +#: src/exit/gnunet-daemon-exit.c:1503 src/exit/gnunet-daemon-exit.c:1615 +#: src/exit/gnunet-daemon-exit.c:1665 src/exit/gnunet-daemon-exit.c:1748 +#: src/exit/gnunet-daemon-exit.c:1875 src/exit/gnunet-daemon-exit.c:2016 +#: src/exit/gnunet-daemon-exit.c:2286 +#, fuzzy +msgid "# Bytes received from CADET" +msgstr "# Бајтови су примљени од TUN-а" + +#: src/exit/gnunet-daemon-exit.c:1507 +#, fuzzy +msgid "# UDP IP-exit requests received via cadet" +msgstr "# Захтеви УДП ИП-излаза су примљени путем меша" + +#: src/exit/gnunet-daemon-exit.c:1619 +#, fuzzy +msgid "# UDP service requests received via cadet" +msgstr "# Захтеви УДП услуге су примљени путем меша" + +#: src/exit/gnunet-daemon-exit.c:1661 +#, fuzzy +msgid "# TCP service creation requests received via cadet" +msgstr "# Захтеви стварања ТЦП услуге су примљени путем меша" + +#: src/exit/gnunet-daemon-exit.c:1752 +#, fuzzy +msgid "# TCP IP-exit creation requests received via cadet" +msgstr "# Захтеви стварања ТЦП ИП-излаза су примљени путем меша" + +#: src/exit/gnunet-daemon-exit.c:1840 +msgid "# TCP DATA requests dropped (no session)" +msgstr "# TCP DATA захтеви су одбачени (нема сесије)" -#: src/exit/gnunet-daemon-exit.c:970 src/exit/gnunet-daemon-exit.c:2397 -#: src/exit/gnunet-daemon-exit.c:2654 src/vpn/gnunet-service-vpn.c:1407 -#: src/vpn/gnunet-service-vpn.c:1797 src/vpn/gnunet-service-vpn.c:1960 +#: src/exit/gnunet-daemon-exit.c:1879 +#, fuzzy +msgid "# TCP data requests received via cadet" +msgstr "# Захтеви ТЦП података су примљени путем меша" + +#: src/exit/gnunet-daemon-exit.c:2020 +#, fuzzy +msgid "# ICMP IP-exit requests received via cadet" +msgstr "# Захтеви ИЦМП ИП-излаза су примљени путем меша" + +#: src/exit/gnunet-daemon-exit.c:2091 src/exit/gnunet-daemon-exit.c:2366 +#: src/exit/gnunet-daemon-exit.c:2736 src/vpn/gnunet-service-vpn.c:817 +#: src/vpn/gnunet-service-vpn.c:1004 src/vpn/gnunet-service-vpn.c:2134 msgid "# ICMPv4 packets dropped (type not allowed)" msgstr "# ICMPv4 пакети су одбачени (врста није дозвољена)" -#: src/exit/gnunet-daemon-exit.c:1007 src/exit/gnunet-daemon-exit.c:2456 -#: src/exit/gnunet-daemon-exit.c:2713 src/vpn/gnunet-service-vpn.c:1463 -#: src/vpn/gnunet-service-vpn.c:1856 src/vpn/gnunet-service-vpn.c:1993 +#: src/exit/gnunet-daemon-exit.c:2156 src/exit/gnunet-daemon-exit.c:2433 +#: src/exit/gnunet-daemon-exit.c:2777 src/vpn/gnunet-service-vpn.c:890 +#: src/vpn/gnunet-service-vpn.c:1043 src/vpn/gnunet-service-vpn.c:2200 msgid "# ICMPv6 packets dropped (type not allowed)" msgstr "# ICMPv6 пакети су одбачени (врста није дозвољена)" -#: src/exit/gnunet-daemon-exit.c:1047 +#: src/exit/gnunet-daemon-exit.c:2290 +#, fuzzy +msgid "# ICMP service requests received via cadet" +msgstr "# Захтеви ИЦМП услуге су примљени путем меша" + +#: src/exit/gnunet-daemon-exit.c:2349 src/vpn/gnunet-service-vpn.c:995 +#: src/vpn/gnunet-service-vpn.c:2122 +msgid "# ICMPv4 packets dropped (impossible PT to v6)" +msgstr "# ICMPv4 пакети су одбачени (немогуће PT за v6)" + +#: src/exit/gnunet-daemon-exit.c:2416 src/vpn/gnunet-service-vpn.c:873 +#: src/vpn/gnunet-service-vpn.c:2164 src/vpn/gnunet-service-vpn.c:2178 +msgid "# ICMPv6 packets dropped (impossible PT to v4)" +msgstr "# ICMPv6 пакети су одбачени (немогуће PT за v4)" + +#: src/exit/gnunet-daemon-exit.c:2498 src/exit/gnunet-daemon-exit.c:3199 +#, fuzzy +msgid "# Inbound CADET channels created" +msgstr "# Долазни МЕШ канали су створени" + +#: src/exit/gnunet-daemon-exit.c:2619 +#, c-format +msgid "Got duplicate service records for `%s:%u'\n" +msgstr "Добих двоструке записе услуге за `%s:%u'\n" + +#: src/exit/gnunet-daemon-exit.c:2639 +#, fuzzy +msgid "# Messages transmitted via cadet channels" +msgstr "# Бајтови су пренесени путем меш канала" + +#: src/exit/gnunet-daemon-exit.c:2831 msgid "# ICMP packets dropped (not allowed)" msgstr "# ICMP пакет је одбачен (није дозвољен)" -#: src/exit/gnunet-daemon-exit.c:1054 +#: src/exit/gnunet-daemon-exit.c:2840 msgid "ICMP Packet dropped, have no matching connection information\n" msgstr "ICMP Пакет је одбачен, нема одговарајуће податке о вези\n" -#: src/exit/gnunet-daemon-exit.c:1130 +#: src/exit/gnunet-daemon-exit.c:2916 msgid "UDP Packet dropped, have no matching connection information\n" msgstr "UDP Пакет је одбачен, нема одговарајуће податке о вези\n" -#: src/exit/gnunet-daemon-exit.c:1204 +#: src/exit/gnunet-daemon-exit.c:2990 msgid "TCP Packet dropped, have no matching connection information\n" msgstr "TCP Пакет је одбачен, нема одговарајуће податке о вези\n" -#: src/exit/gnunet-daemon-exit.c:1256 +#: src/exit/gnunet-daemon-exit.c:3039 msgid "# Packets received from TUN" msgstr "# Пакети су примљени од TUN-а" -#: src/exit/gnunet-daemon-exit.c:1270 +#: src/exit/gnunet-daemon-exit.c:3054 msgid "# Bytes received from TUN" msgstr "# Бајтови су примљени од TUN-а" -#: src/exit/gnunet-daemon-exit.c:1296 +#: src/exit/gnunet-daemon-exit.c:3081 msgid "IPv4 packet options received. Ignored.\n" msgstr "Опције IPv4 пакета су примљене. Занемарено.\n" -#: src/exit/gnunet-daemon-exit.c:1323 +#: src/exit/gnunet-daemon-exit.c:3112 #, c-format msgid "IPv4 packet with unsupported next header %u received. Ignored.\n" -msgstr "IPv4 пакет са неподржаним следећим заглављем %u је примљен. Занемарено.\n" +msgstr "" +"IPv4 пакет са неподржаним следећим заглављем %u је примљен. Занемарено.\n" -#: src/exit/gnunet-daemon-exit.c:1369 +#: src/exit/gnunet-daemon-exit.c:3164 #, c-format msgid "IPv6 packet with unsupported next header %d received. Ignored.\n" -msgstr "IPv6 пакет са неподржаним следећим заглављем %d је примљен. Занемарено.\n" +msgstr "" +"IPv6 пакет са неподржаним следећим заглављем %d је примљен. Занемарено.\n" -#: src/exit/gnunet-daemon-exit.c:1377 +#: src/exit/gnunet-daemon-exit.c:3173 #, c-format msgid "Packet from unknown protocol %u received. Ignored.\n" msgstr "Пакет са непознатог протокола %u је примљен. Занемарено.\n" -#: src/exit/gnunet-daemon-exit.c:1759 -msgid "# TCP packets sent via TUN" -msgstr "# ТЦП пакети су послати путем ТУН-а" - -#: src/exit/gnunet-daemon-exit.c:1872 -msgid "# TCP service creation requests received via mesh" -msgstr "# Захтеви стварања ТЦП услуге су примљени путем меша" - -#: src/exit/gnunet-daemon-exit.c:1875 src/exit/gnunet-daemon-exit.c:1968 -#: src/exit/gnunet-daemon-exit.c:2073 src/exit/gnunet-daemon-exit.c:2321 -#: src/exit/gnunet-daemon-exit.c:2570 src/exit/gnunet-daemon-exit.c:2859 -#: src/exit/gnunet-daemon-exit.c:2966 -msgid "# Bytes received from MESH" -msgstr "# Бајтови су примљени од МЕША" - -#: src/exit/gnunet-daemon-exit.c:1909 src/exit/gnunet-daemon-exit.c:2990 -#, c-format -msgid "No service %s found for %s on port %d!\n" -msgstr "Ниједна услуга %s није нађена %s на прикључнику %d!\n" - -#: src/exit/gnunet-daemon-exit.c:1914 -msgid "# TCP requests dropped (no such service)" -msgstr "# TCP захтеви су одбачени (нема такве услуге)" - -#: src/exit/gnunet-daemon-exit.c:1971 -msgid "# TCP IP-exit creation requests received via mesh" -msgstr "# Захтеви стварања ТЦП ИП-излаза су примљени путем меша" - -#: src/exit/gnunet-daemon-exit.c:2076 -msgid "# TCP data requests received via mesh" -msgstr "# Захтеви ТЦП података су примљени путем меша" - -#: src/exit/gnunet-daemon-exit.c:2090 -msgid "# TCP DATA requests dropped (no session)" -msgstr "# TCP DATA захтеви су одбачени (нема сесије)" - -#: src/exit/gnunet-daemon-exit.c:2150 -msgid "# ICMP packets sent via TUN" -msgstr "# ICMP пакети су послати путем TUN-а" - -#: src/exit/gnunet-daemon-exit.c:2324 -msgid "# ICMP IP-exit requests received via mesh" -msgstr "# Захтеви ИЦМП ИП-излаза су примљени путем меша" - -#: src/exit/gnunet-daemon-exit.c:2573 -msgid "# ICMP service requests received via mesh" -msgstr "# Захтеви ИЦМП услуге су примљени путем меша" - -#: src/exit/gnunet-daemon-exit.c:2639 src/vpn/gnunet-service-vpn.c:1397 -#: src/vpn/gnunet-service-vpn.c:1954 -msgid "# ICMPv4 packets dropped (impossible PT to v6)" -msgstr "# ICMPv4 пакети су одбачени (немогуће PT за v6)" - -#: src/exit/gnunet-daemon-exit.c:2698 src/vpn/gnunet-service-vpn.c:1433 -#: src/vpn/gnunet-service-vpn.c:1445 src/vpn/gnunet-service-vpn.c:1844 -msgid "# ICMPv6 packets dropped (impossible PT to v4)" -msgstr "# ICMPv6 пакети су одбачени (немогуће PT за v4)" - -#: src/exit/gnunet-daemon-exit.c:2748 -msgid "# UDP packets sent via TUN" -msgstr "# UDP пакети су послати путем TUN-а" - -#: src/exit/gnunet-daemon-exit.c:2862 -msgid "# UDP IP-exit requests received via mesh" -msgstr "# Захтеви УДП ИП-излаза су примљени путем меша" - -#: src/exit/gnunet-daemon-exit.c:2969 -msgid "# UDP service requests received via mesh" -msgstr "# Захтеви УДП услуге су примљени путем меша" - -#: src/exit/gnunet-daemon-exit.c:2995 -msgid "# UDP requests dropped (no such service)" -msgstr "# UDP захтеви су одбачени (нема такве услуге)" - -#: src/exit/gnunet-daemon-exit.c:3031 -msgid "# Inbound MESH channels created" -msgstr "# Долазни МЕШ канали су створени" - -#: src/exit/gnunet-daemon-exit.c:3235 src/exit/gnunet-daemon-exit.c:3245 +#: src/exit/gnunet-daemon-exit.c:3377 src/exit/gnunet-daemon-exit.c:3388 #, c-format msgid "Option `%s' for domain `%s' is not formatted correctly!\n" msgstr "Опција „%s“ за домен „%s“ није форматирана исправна!\n" -#: src/exit/gnunet-daemon-exit.c:3259 src/exit/gnunet-daemon-exit.c:3267 +#: src/exit/gnunet-daemon-exit.c:3402 src/exit/gnunet-daemon-exit.c:3410 #, c-format msgid "`%s' is not a valid port number (for domain `%s')!" msgstr "„%s“ није исправан број прикључника (за домен „%s“)!" -#: src/exit/gnunet-daemon-exit.c:3300 +#: src/exit/gnunet-daemon-exit.c:3452 #, c-format msgid "No addresses found for hostname `%s' of service `%s'!\n" msgstr "Није нађена ниједна адрееса за назив домаћина „%s“ услуге „%s“!\n" -#: src/exit/gnunet-daemon-exit.c:3314 src/exit/gnunet-daemon-exit.c:3326 +#: src/exit/gnunet-daemon-exit.c:3467 src/exit/gnunet-daemon-exit.c:3482 #, c-format msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n" msgstr "Услуга „%s“ је подешена за IPv4, али IPv4 је искључено!\n" -#: src/exit/gnunet-daemon-exit.c:3337 +#: src/exit/gnunet-daemon-exit.c:3496 #, c-format msgid "No IP addresses found for hostname `%s' of service `%s'!\n" msgstr "Није нађена ниједна ИП адрееса за назив домаћина „%s“ услуге „%s“!\n" -#: src/exit/gnunet-daemon-exit.c:3527 -msgid "This system does not support IPv4, will disable IPv4 functions despite them being enabled in the configuration\n" -msgstr "Овај систем не подржава IPv4, искључиће IPv4 функције упркос томе што су укључене у подешавањима\n" - -#: src/exit/gnunet-daemon-exit.c:3535 -msgid "This system does not support IPv6, will disable IPv6 functions despite them being enabled in the configuration\n" -msgstr "Овај систем не подржава IPv6, искључиће IPv6 функције упркос томе што су укључене у подешавањима\n" +#: src/exit/gnunet-daemon-exit.c:3641 +msgid "" +"This system does not support IPv4, will disable IPv4 functions despite them " +"being enabled in the configuration\n" +msgstr "" +"Овај систем не подржава IPv4, искључиће IPv4 функције упркос томе што су " +"укључене у подешавањима\n" -#: src/exit/gnunet-daemon-exit.c:3542 -msgid "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use ENABLE_IPv4=YES\n" -msgstr "Не могу да укључим ИПв4 излаз али искључујем ИПв4 на ТУН сучељу, користићу „ENABLE_IPv4=ДА“\n" +#: src/exit/gnunet-daemon-exit.c:3650 +msgid "" +"This system does not support IPv6, will disable IPv6 functions despite them " +"being enabled in the configuration\n" +msgstr "" +"Овај систем не подржава IPv6, искључиће IPv6 функције упркос томе што су " +"укључене у подешавањима\n" -#: src/exit/gnunet-daemon-exit.c:3548 -msgid "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use ENABLE_IPv6=YES\n" -msgstr "Не могу да укључим ИПв6 излаз али искључујем ИПв6 на ТУН сучељу, користићу „ENABLE_IPv6=ДА“\n" +#: src/exit/gnunet-daemon-exit.c:3658 +msgid "" +"Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use " +"ENABLE_IPv4=YES\n" +msgstr "" +"Не могу да укључим ИПв4 излаз али искључујем ИПв4 на ТУН сучељу, користићу " +"„ENABLE_IPv4=ДА“\n" -#: src/exit/gnunet-daemon-exit.c:3554 src/exit/gnunet-daemon-exit.c:3717 -#: src/pt/gnunet-daemon-pt.c:1247 -msgid "No useful service enabled. Exiting.\n" -msgstr "Ниједна корисна услуга није укључена. Излазим.\n" +#: src/exit/gnunet-daemon-exit.c:3665 +msgid "" +"Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use " +"ENABLE_IPv6=YES\n" +msgstr "" +"Не могу да укључим ИПв6 излаз али искључујем ИПв6 на ТУН сучељу, користићу " +"„ENABLE_IPv6=ДА“\n" -#: src/exit/gnunet-daemon-exit.c:3664 +#: src/exit/gnunet-daemon-exit.c:3836 msgid "Must be a number" msgstr "Мора бити број" -#: src/exit/gnunet-daemon-exit.c:3813 +#: src/exit/gnunet-daemon-exit.c:3952 +#, c-format +msgid "`%s' is not SUID or the path is invalid, EXIT will not work\n" +msgstr "" + +#: src/exit/gnunet-daemon-exit.c:3964 src/pt/gnunet-daemon-pt.c:1210 +msgid "No useful service enabled. Exiting.\n" +msgstr "Ниједна корисна услуга није укључена. Излазим.\n" + +#: src/exit/gnunet-daemon-exit.c:4118 msgid "Daemon to run to provide an IP exit node for the VPN" msgstr "Демон за покретање за обезбеђивање чвора ИП излаза за ВПН" -#: src/experimentation/gnunet-daemon-experimentation.c:55 -msgid "Experimentation daemon shutting down ...\n" -msgstr "Демон експериментисања се гаси ...\n" +#: src/fragmentation/defragmentation.c:272 +msgid "# acknowledgements sent for fragment" +msgstr "# потврде су послате за делић" -#: src/experimentation/gnunet-daemon-experimentation.c:77 -msgid "Experimentation daemon starting ...\n" -msgstr "Демон експериментисања се покреће ...\n" +#: src/fragmentation/defragmentation.c:465 +#: src/transport/plugin_transport_wlan.c:1559 +msgid "# fragments received" +msgstr "# делићи су примљени" -#: src/experimentation/gnunet-daemon-experimentation.c:83 -msgid "Failed to create statistics!\n" -msgstr "Нисам успео да направим статистику!\n" +#: src/fragmentation/defragmentation.c:537 +msgid "# duplicate fragments received" +msgstr "# двоструки делићи су примљени" -#: src/experimentation/gnunet-daemon-experimentation.c:120 -msgid "GNUnet experimentation daemon" -msgstr "Демон експериментисања ГНУнет-а" +#: src/fragmentation/defragmentation.c:555 +msgid "# messages defragmented" +msgstr "# делићи порука су уједињени" -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:241 -#, c-format -msgid "Experiment `%s': Experiment signature is invalid\n" -msgstr "Експеримент „%s“: Потпис експеримента је неисправан\n" +#: src/fragmentation/fragmentation.c:240 +msgid "# fragments transmitted" +msgstr "# делићи су пренесени" -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:250 -#, c-format -msgid "Adding experiment `%s' running from `%s' to `%s' every %llu sec. for %llu sec. \n" -msgstr "Додајем експеримент „%s“ који ради из „%s“ у „%s“ сваке %llu сек. за %llu сек. \n" +#: src/fragmentation/fragmentation.c:245 +msgid "# fragments retransmitted" +msgstr "# делићи су поново пренесени" -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:303 -#, c-format -msgid "Experiment `%s': Issuer missing\n" -msgstr "Експеримент „%s“: Недостаје издавач\n" +#: src/fragmentation/fragmentation.c:278 +msgid "# fragments wrap arounds" +msgstr "# делићи се преламају около" -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:312 -#, c-format -msgid "Experiment `%s': Issuer invalid\n" -msgstr "Експеримент „%s“: Неисправан издавач\n" +#: src/fragmentation/fragmentation.c:325 +msgid "# messages fragmented" +msgstr "# поруке су расцепкане" -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:320 -#, c-format -msgid "Experiment `%s': Issuer not accepted!\n" -msgstr "Експеримент „%s“: Издавач није прихваћен!\n" +#: src/fragmentation/fragmentation.c:331 +msgid "# total size of fragmented messages" +msgstr "# укупна величина расцепканих порука" -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:330 -#, c-format -msgid "Experiment `%s': Version missing or invalid \n" -msgstr "Експеримент „%s“: Недостаје издање или је неисправно \n" +#: src/fragmentation/fragmentation.c:459 +msgid "# fragment acknowledgements received" +msgstr "# потврде делића су примљене" -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:339 -#, c-format -msgid "Experiment `%s': Required capabilities missing \n" -msgstr "Експеримент „%s“: Захтеване могућности недостају \n" - -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:345 -#, c-format -msgid "Experiment `%s': Required capabilities invalid \n" -msgstr "Експеримент „%s“: Захтеване могућности су неисправне \n" - -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:390 -#, c-format -msgid "Failed to parse file `%s'\n" -msgstr "Нисам успео да обрадим датотеку „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:420 -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:452 -msgid "No valid experiment issuers configured! Set value to public keys of issuers! Exiting.\n" -msgstr "Нису подешени исправни издавачи експеримента! Поставите вредност на јавне кључеве издавача! Излазим.\n" - -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:435 -msgid "Invalid value for public key\n" -msgstr "Неисправна вредност за јавни кључ\n" - -#: src/experimentation/gnunet-daemon-experimentation_experiments.c:473 -#, c-format -msgid "Cannot read experiments file `%s'\n" -msgstr "Не могу да прочитам датотеку експеримената „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_nodes.c:221 -#, c-format -msgid "Cannot send message to peer `%s' for experiment `%s'\n" -msgstr "Не могу да пошаљем поруку парњаку „%s“ за екперимент „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_nodes.c:309 -#, c-format -msgid "Sending experimentation request to peer %s\n" -msgstr "Шаљем захтев експериментисања парњаку %s\n" - -#: src/experimentation/gnunet-daemon-experimentation_nodes.c:453 -#, c-format -msgid "Added peer `%s' as active node\n" -msgstr "Додат је парњак „%s“ као активан чвор\n" - -#: src/experimentation/gnunet-daemon-experimentation_nodes.c:891 -#, c-format -msgid "Connected to peer %s\n" -msgstr "Повезан са парњаком „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_nodes.c:921 -#, c-format -msgid "Disconnected from peer %s\n" -msgstr "Прекинута је веза са парњаком „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_nodes.c:1104 -msgid "Failed to connect to CORE service!\n" -msgstr "Нисам успео да се повежем са ЈЕЗГРЕНОМ услугом!\n" - -#: src/experimentation/gnunet-daemon-experimentation_scheduler.c:108 -#, c-format -msgid "Peer `%s' did not respond to request for experiment `%s'\n" -msgstr "Парњак „%s“ није одговорио на захтев за експериментом „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_scheduler.c:143 -#, c-format -msgid "Starting inbound experiment `%s' with peer `%s'\n" -msgstr "Покрећем експеримент долазности „%s“ са парњаком „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_scheduler.c:276 -#, c-format -msgid "Starting outbound experiment `%s' with peer `%s'\n" -msgstr "Покрећем експеримент одлазности „%s“ са парњаком „%s“\n" - -#: src/experimentation/gnunet-daemon-experimentation_scheduler.c:294 -#, c-format -msgid "Received %s message from peer %s for experiment `%s'\n" -msgstr "Примих %s поруку са парњака %s за експеримент „%s“\n" - -#: src/fragmentation/defragmentation.c:270 -msgid "# acknowledgements sent for fragment" -msgstr "# потврде су послате за делић" - -#: src/fragmentation/defragmentation.c:456 -msgid "# fragments received" -msgstr "# делићи су примљени" - -#: src/fragmentation/defragmentation.c:521 -msgid "# duplicate fragments received" -msgstr "# двоструки делићи су примљени" - -#: src/fragmentation/defragmentation.c:534 -msgid "# messages defragmented" -msgstr "# делићи порука су уједињени" - -#: src/fragmentation/fragmentation.c:208 -msgid "# fragments transmitted" -msgstr "# делићи су пренесени" - -#: src/fragmentation/fragmentation.c:211 -msgid "# fragments retransmitted" -msgstr "# делићи су поново пренесени" - -#: src/fragmentation/fragmentation.c:237 -msgid "# fragments wrap arounds" -msgstr "# делићи се преламају около" - -#: src/fragmentation/fragmentation.c:281 -msgid "# messages fragmented" -msgstr "# поруке су расцепкане" - -#: src/fragmentation/fragmentation.c:284 -msgid "# total size of fragmented messages" -msgstr "# укупна величина расцепканих порука" - -#: src/fragmentation/fragmentation.c:405 -msgid "# fragment acknowledgements received" -msgstr "# потврде делића су примљене" - -#: src/fragmentation/fragmentation.c:411 +#: src/fragmentation/fragmentation.c:466 msgid "# bits removed from fragmentation ACKs" msgstr "# битови су уклоњени из АЦК-ова расцепканости" -#: src/fragmentation/fragmentation.c:435 +#: src/fragmentation/fragmentation.c:490 msgid "# fragmentation transmissions completed" msgstr "# преноси расцепканости су завршени" -#: src/fs/fs_api.c:465 +#: src/fs/fs_api.c:491 #, c-format msgid "Could not open file `%s': %s" msgstr "Не могу да отворим датотеку „%s“: %s" -#: src/fs/fs_api.c:474 +#: src/fs/fs_api.c:502 #, c-format msgid "Could not read file `%s': %s" msgstr "Не могу да читам датотеку „%s“: %s" -#: src/fs/fs_api.c:480 +#: src/fs/fs_api.c:510 #, c-format msgid "Short read reading from file `%s'!" msgstr "Кратко читање читајући из датотеке „%s“!" -#: src/fs/fs_api.c:1066 +#: src/fs/fs_api.c:1173 #, c-format msgid "Failed to resume publishing information `%s': %s\n" msgstr "Нисам успео да наставим са подацима објављивања „%s“: %s\n" -#: src/fs/fs_api.c:1571 +#: src/fs/fs_api.c:1724 #, c-format msgid "Failure while resuming publishing operation `%s': %s\n" msgstr "Неуспех приликом настављања са радњом објављивања „%s“: %s\n" -#: src/fs/fs_api.c:1585 +#: src/fs/fs_api.c:1739 #, c-format msgid "Failed to resume publishing operation `%s': %s\n" msgstr "Нисам успео да наставим са радњом објављивања „%s“: %s\n" -#: src/fs/fs_api.c:2242 +#: src/fs/fs_api.c:2468 #, c-format msgid "Failure while resuming unindexing operation `%s': %s\n" -msgstr "Неуспех приликом настављања са радњом поништавања индексирања „%s“: %s\n" +msgstr "" +"Неуспех приликом настављања са радњом поништавања индексирања „%s“: %s\n" -#: src/fs/fs_api.c:2252 +#: src/fs/fs_api.c:2479 #, c-format msgid "Failed to resume unindexing operation `%s': %s\n" msgstr "Нисам успео да наставим са радњом поништавања индексирања „%s“: %s\n" -#: src/fs/fs_api.c:2378 src/fs/fs_api.c:2619 +#: src/fs/fs_api.c:2627 src/fs/fs_api.c:2873 #, c-format msgid "Failed to resume sub-download `%s': %s\n" msgstr "Нисам успео да наставим са садржаним преузимањем „%s“: %s\n" -#: src/fs/fs_api.c:2395 +#: src/fs/fs_api.c:2645 #, c-format msgid "Failed to resume sub-search `%s': %s\n" msgstr "Нисам успео да наставим са садржаном претрагом „%s“: %s\n" -#: src/fs/fs_api.c:2409 src/fs/fs_api.c:2428 src/fs/fs_api.c:2911 +#: src/fs/fs_api.c:2661 src/fs/fs_api.c:2681 src/fs/fs_api.c:3180 #, c-format msgid "Failure while resuming search operation `%s': %s\n" msgstr "Неуспех приликом настављања са радњом претраге „%s“: %s\n" -#: src/fs/fs_api.c:2610 +#: src/fs/fs_api.c:2863 #, c-format msgid "Failed to resume sub-download `%s': could not open file `%s'\n" -msgstr "Нисам успео да наставим са садржаним преузимањем „%s“: не могу да отворим датотеку „%s“\n" +msgstr "" +"Нисам успео да наставим са садржаним преузимањем „%s“: не могу да отворим " +"датотеку „%s“\n" -#: src/fs/fs_api.c:2855 +#: src/fs/fs_api.c:3124 msgid "Could not resume running search, will resume as paused search\n" -msgstr "Не могу да наставим са покренутом претрагом, наставићу као са паузираном претрагом\n" +msgstr "" +"Не могу да наставим са покренутом претрагом, наставићу као са паузираном " +"претрагом\n" -#: src/fs/fs_api.c:2949 +#: src/fs/fs_api.c:3219 #, c-format msgid "Failure while resuming download operation `%s': %s\n" msgstr "Неуспех приликом настављања са радњом преузимања „%s“: %s\n" -#: src/fs/fs_directory.c:208 +#: src/fs/fs_directory.c:215 msgid "MAGIC mismatch. This is not a GNUnet directory.\n" msgstr "МАГИЈА не одговара. Ово није директоријум ГНУнет-а.\n" -#: src/fs/fs_download.c:322 -msgid "Recursive downloads of directories larger than 4 GB are not supported on 32-bit systems\n" -msgstr "Дубинска преузимања директоријума већих од 4 GB нису подржана на 32-битним системима\n" +#: src/fs/fs_download.c:310 +msgid "" +"Recursive downloads of directories larger than 4 GB are not supported on 32-" +"bit systems\n" +msgstr "" +"Дубинска преузимања директоријума већих од 4 GB нису подржана на 32-битним " +"системима\n" -#: src/fs/fs_download.c:342 +#: src/fs/fs_download.c:332 msgid "Directory too large for system address space\n" msgstr "Директоријум је превелик за простор адресу система\n" -#: src/fs/fs_download.c:523 src/fs/fs_download.c:535 +#: src/fs/fs_download.c:346 +#, fuzzy, c-format +msgid "" +"Failed to access full directroy contents of `%s' for recursive download\n" +msgstr "Нисам успео да направим директоријум за дубинско преузимање „%s“\n" + +#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 #, c-format msgid "Failed to open file `%s' for writing" msgstr "Нисам успео да отворим датотеку „%s“ за писање" -#: src/fs/fs_download.c:905 +#: src/fs/fs_download.c:960 #, c-format msgid "Failed to create directory for recursive download of `%s'\n" msgstr "Нисам успео да направим директоријум за дубинско преузимање „%s“\n" -#: src/fs/fs_download.c:987 -#, c-format -msgid "Internal error or bogus download URI (expected %u bytes at depth %u and offset %llu/%llu, got %u bytes)" -msgstr "Унутрашња грешка или лажна путања преузимања (очекивах %u бајта на дубини %u и померају %llu/%llu, добих %u бајта)" +#: src/fs/fs_download.c:1053 +#, fuzzy, c-format +msgid "" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" +msgstr "" +"Унутрашња грешка или лажна путања преузимања (очекивах %u бајта на дубини %u " +"и померају %llu/%llu, добих %u бајта)" -#: src/fs/fs_download.c:1013 +#: src/fs/fs_download.c:1075 msgid "internal error decrypting content" msgstr "унутрашња грешка дешифровања садржаја" -#: src/fs/fs_download.c:1036 +#: src/fs/fs_download.c:1098 #, c-format msgid "Download failed: could not open file `%s': %s" msgstr "Преузимање није успело: не могу да отворим датотеку „%s“: %s" -#: src/fs/fs_download.c:1046 +#: src/fs/fs_download.c:1109 #, c-format msgid "Failed to seek to offset %llu in file `%s': %s" msgstr "Нисам успео да пређем на померај %llu у датотеци „%s“: %s" -#: src/fs/fs_download.c:1055 +#: src/fs/fs_download.c:1119 #, c-format msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s" -msgstr "Нисам успео да запишем блок од %u бајта на померају %llu у датотеци „%s“: %s" +msgstr "" +"Нисам успео да запишем блок од %u бајта на померају %llu у датотеци „%s“: %s" -#: src/fs/fs_download.c:1153 +#: src/fs/fs_download.c:1227 msgid "internal error decoding tree" msgstr "унутрашња грешка декодирања стабла" -#: src/fs/fs_download.c:1944 +#: src/fs/fs_download.c:1899 msgid "Invalid URI" msgstr "Неисправан УРИ" -#: src/fs/fs_getopt.c:192 -#, c-format -msgid "Unknown metadata type in metadata option `%s'. Using metadata type `unknown' instead.\n" -msgstr "Непозната врста метаподатака у опцији метаподатака „%s“. Користим уместо тога користим врсту метаподатака `unknown'.\n" - -#: src/fs/fs_list_indexed.c:90 -#, c-format -msgid "Failed to receive response for `%s' request from `%s' service.\n" -msgstr "Нисам успео да примим одговор за „%s“ захтев од „%s“ услуге.\n" - -#: src/fs/fs_list_indexed.c:113 +#: src/fs/fs_getopt.c:237 #, c-format -msgid "Failed to receive valid response for `%s' request from `%s' service.\n" -msgstr "Нисам успео да примим исправан одговор за „%s“ захтев од „%s“ услуге.\n" +msgid "" +"Unknown metadata type in metadata option `%s'. Using metadata type " +"`unknown' instead.\n" +msgstr "" +"Непозната врста метаподатака у опцији метаподатака „%s“. Користим уместо " +"тога користим врсту метаподатака `unknown'.\n" #: src/fs/fs_list_indexed.c:151 +#, fuzzy, c-format +msgid "Failed to receive response from `%s' service.\n" +msgstr "Нисам успео да примим одговор са услуге „PEERINFO“." + +#: src/fs/fs_list_indexed.c:195 #, c-format msgid "Failed to not connect to `%s' service.\n" msgstr "Нисам успео да се не повежем са „%s“ услугом.\n" -#: src/fs/fs_misc.c:126 +#: src/fs/fs_misc.c:128 #, c-format msgid "Did not find mime type `%s' in extension list.\n" msgstr "Нисам успео да нађем миме врсту „%s“ на списку проширења.\n" -#: src/fs/fs_namespace.c:207 +#: src/fs/fs_namespace.c:202 #, c-format msgid "Failed to open `%s' for writing: %s\n" msgstr "Нисам успео да отворим „%s“ ради уписа: %s\n" -#: src/fs/fs_namespace.c:229 +#: src/fs/fs_namespace.c:233 #, c-format msgid "Failed to write `%s': %s\n" msgstr "Нисам успео да пишем „%s“: %s\n" -#: src/fs/fs_namespace.c:320 +#: src/fs/fs_namespace.c:330 #, c-format msgid "Failed to read `%s': %s\n" msgstr "Нисам успео да прочитам „%s“: %s\n" -#: src/fs/fs_namespace.c:466 +#: src/fs/fs_namespace.c:472 msgid "Failed to connect to datastore." msgstr "Нисам успео да се повежем са смештајем података." -#: src/fs/fs_publish.c:125 src/fs/fs_publish.c:415 +#: src/fs/fs_publish.c:128 src/fs/fs_publish.c:438 #, c-format msgid "Publishing failed: %s" msgstr "Објављивање није успело: %s" -#: src/fs/fs_publish.c:667 src/fs/fs_publish.c:684 src/fs/fs_publish.c:723 -#: src/fs/fs_publish.c:744 src/fs/fs_publish.c:768 src/fs/fs_publish.c:914 +#: src/fs/fs_publish.c:731 +#, fuzzy, c-format +msgid "Can not index file `%s': %s.\n" +msgstr "Не могу да отворим датотеку кључа домаћина „%s“: %s\n" + +#: src/fs/fs_publish.c:788 src/fs/fs_publish.c:834 src/fs/fs_publish.c:855 +#: src/fs/fs_publish.c:886 src/fs/fs_publish.c:1154 #, c-format msgid "Can not index file `%s': %s. Will try to insert instead.\n" msgstr "Не могу да индексирам датотеку „%s“: %s. Покушаћу да је уметнем.\n" -#: src/fs/fs_publish.c:669 -msgid "timeout on index-start request to `fs' service" +#: src/fs/fs_publish.c:790 +#, fuzzy +msgid "error on index-start request to `fs' service" msgstr "истекло је време на захтев почетка индекса за „fs“ услугу" -#: src/fs/fs_publish.c:681 -msgid "unknown error" -msgstr "непозната грешка" - -#: src/fs/fs_publish.c:725 +#: src/fs/fs_publish.c:836 msgid "failed to compute hash" msgstr "нисам успео да прорачунам хеш" -#: src/fs/fs_publish.c:745 +#: src/fs/fs_publish.c:856 msgid "filename too long" msgstr "назив датотеке је предуг" -#: src/fs/fs_publish.c:770 +#: src/fs/fs_publish.c:888 msgid "could not connect to `fs' service" msgstr "не могу да се повежем са „fs“ услугом" -#: src/fs/fs_publish.c:793 +#: src/fs/fs_publish.c:914 #, c-format msgid "Failed to get file identifiers for `%s'\n" msgstr "Нисам успео да добавим одреднике датотеке за „%s“\n" -#: src/fs/fs_publish.c:862 +#: src/fs/fs_publish.c:1003 src/fs/fs_publish.c:1040 +msgid "Can not create LOC URI. Will continue with CHK instead.\n" +msgstr "" + +#: src/fs/fs_publish.c:1107 #, c-format msgid "Recursive upload failed at `%s': %s" msgstr "Дубински утовар није успео на „%s“: %s" -#: src/fs/fs_publish.c:868 +#: src/fs/fs_publish.c:1115 #, c-format msgid "Recursive upload failed: %s" msgstr "Дубински утовар није успео: %s" -#: src/fs/fs_publish.c:915 +#: src/fs/fs_publish.c:1156 msgid "needs to be an actual file" msgstr "треба да буде актуелна датотека" -#: src/fs/fs_publish.c:1151 -#, c-format -msgid "Insufficient space for publishing: %s" -msgstr "Недовољно простора за објављивање: %s" +#: src/fs/fs_publish.c:1396 +#, fuzzy, c-format +msgid "Datastore failure: %s" +msgstr "# Неуспеси „СТАВИ“ смештаја података" -#: src/fs/fs_publish.c:1243 +#: src/fs/fs_publish.c:1488 #, c-format msgid "Reserving space for %u entries and %llu bytes for publication\n" msgstr "Резервишем простор за %u уноса и %llu бајта за објављивање\n" -#: src/fs/fs_publish_ksk.c:219 +#: src/fs/fs_publish_ksk.c:218 msgid "Could not connect to datastore." msgstr "Не могу да се повежем са смештајем података." -#: src/fs/fs_publish_ublock.c:219 +#: src/fs/fs_publish_ublock.c:240 msgid "Internal error." msgstr "Унутрашња грешка." -#: src/fs/fs_search.c:813 +#: src/fs/fs_search.c:829 src/fs/fs_search.c:900 #, c-format msgid "Failed to parse URI `%s': %s\n" msgstr "Нисам успео да обрадим УРИ „%s“: %s\n" -#: src/fs/fs_search.c:872 +#: src/fs/fs_search.c:993 #, c-format msgid "Got result with unknown block type `%d', ignoring" msgstr "Добих резултат са непознатом врстом блока „%d“, занемарујем" -#: src/fs/fs_unindex.c:59 +#: src/fs/fs_unindex.c:63 msgid "Failed to find given position in file" msgstr "Нисам успео да нађем дати положај у датотеци" -#: src/fs/fs_unindex.c:64 +#: src/fs/fs_unindex.c:68 msgid "Failed to read file" msgstr "Нисам успео да прочитам датотеку" -#: src/fs/fs_unindex.c:234 -msgid "Unexpected time for a response from `fs' service." -msgstr "Неочекивано време за одговор са „fs“ услуге." - -#: src/fs/fs_unindex.c:242 -msgid "Timeout waiting for `fs' service." -msgstr "Истекло је време чекања на „fs“ услугу." - -#: src/fs/fs_unindex.c:250 -msgid "Invalid response from `fs' service." -msgstr "Неисправан одговор са „fs“ услуге." +#: src/fs/fs_unindex.c:275 +#, fuzzy +msgid "Error communicating with `fs' service." +msgstr "Грешка у комуникацији са услугом ПОДАЦИ_ПАРЊАКА: %s\n" -#: src/fs/fs_unindex.c:291 +#: src/fs/fs_unindex.c:326 msgid "Failed to connect to FS service for unindexing." msgstr "Нисам успео да се повежем на ФС услугу зарад поништавања индексирања." -#: src/fs/fs_unindex.c:347 src/fs/fs_unindex.c:359 +#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:389 msgid "Failed to get KSKs from directory scan." msgstr "Нисам успео да добавим KSKs из скенирања директоријума." -#: src/fs/fs_unindex.c:355 +#: src/fs/fs_unindex.c:385 #, c-format msgid "Internal error scanning `%s'.\n" msgstr "Унутрашња грешка скенирања „%s“.\n" -#: src/fs/fs_unindex.c:414 +#: src/fs/fs_unindex.c:446 #, c-format msgid "Failed to remove UBlock: %s\n" msgstr "Нисам успео да уклоним „UBlock“: %s\n" -#: src/fs/fs_unindex.c:562 src/fs/fs_unindex.c:626 +#: src/fs/fs_unindex.c:592 src/fs/fs_unindex.c:656 msgid "Failed to connect to `datastore' service." msgstr "Нисам успео да се повежем са „datastore“ услугом." -#: src/fs/fs_unindex.c:639 +#: src/fs/fs_unindex.c:669 msgid "Failed to open file for unindexing." msgstr "Нисам успео да отворим датотеку за поништавање индексирања." -#: src/fs/fs_unindex.c:673 +#: src/fs/fs_unindex.c:708 msgid "Failed to compute hash of file." msgstr "Нисам успео да израчунам хеш датотеке." -#: src/fs/fs_uri.c:222 -#, no-c-format -msgid "`%' must be followed by HEX number" +#: src/fs/fs_uri.c:239 +#, fuzzy, no-c-format +msgid "Malformed KSK URI (`%' must be followed by HEX number)" msgstr "„%“ мора бити праћено HEX бројем" -#: src/fs/fs_uri.c:281 +#: src/fs/fs_uri.c:298 msgid "Malformed KSK URI (must not begin or end with `+')" msgstr "Лоша KSK УРИ (не сме почињати или завршавати се са знаком +)" -#: src/fs/fs_uri.c:299 -msgid "`++' not allowed in KSK URI" -msgstr "++ није дозвољено у KSK УРИ-ју" +#: src/fs/fs_uri.c:316 +#, fuzzy +msgid "Malformed KSK URI (`++' not allowed)" +msgstr "Лоша KSK УРИ (не сме почињати или завршавати се са знаком +)" -#: src/fs/fs_uri.c:306 -msgid "Quotes not balanced in KSK URI" -msgstr "Квоте нису уравнотежене у КСК путањи" +#: src/fs/fs_uri.c:323 +#, fuzzy +msgid "Malformed KSK URI (quotes not balanced)" +msgstr "Лоша KSK УРИ (не сме почињати или завршавати се са знаком +)" -#: src/fs/fs_uri.c:376 -msgid "Malformed SKS URI" +#: src/fs/fs_uri.c:390 +#, fuzzy +msgid "Malformed SKS URI (wrong syntax)" msgstr "Лоша SKS УРИ" -#: src/fs/fs_uri.c:419 src/fs/fs_uri.c:434 -msgid "Malformed CHK URI" +#: src/fs/fs_uri.c:431 +#, fuzzy +msgid "Malformed CHK URI (wrong syntax)" msgstr "Лоша CHK УРИ" -#: src/fs/fs_uri.c:512 src/fs/fs_uri.c:580 -msgid "SKS URI malformed" -msgstr "SKS УРИ је лоше" +#: src/fs/fs_uri.c:448 +msgid "Malformed CHK URI (failed to decode CHK)" +msgstr "" + +#: src/fs/fs_uri.c:525 +#, fuzzy +msgid "LOC URI malformed (wrong syntax)" +msgstr "LOC УРИ је лоше" + +#: src/fs/fs_uri.c:542 +#, fuzzy +msgid "LOC URI malformed (no CHK)" +msgstr "LOC УРИ је лоше" -#: src/fs/fs_uri.c:527 src/fs/fs_uri.c:537 -msgid "LOC URI malformed" +#: src/fs/fs_uri.c:552 +#, fuzzy +msgid "LOC URI malformed (missing LOC)" msgstr "LOC УРИ је лоше" -#: src/fs/fs_uri.c:545 src/fs/fs_uri.c:553 +#: src/fs/fs_uri.c:560 +#, fuzzy +msgid "LOC URI malformed (wrong syntax for public key)" +msgstr "LOC УРИ је лоше (не могу да декодирам јавни кључ)" + +#: src/fs/fs_uri.c:569 msgid "LOC URI malformed (could not decode public key)" msgstr "LOC УРИ је лоше (не могу да декодирам јавни кључ)" -#: src/fs/fs_uri.c:559 -msgid "SKS URI malformed (could not find signature)" +#: src/fs/fs_uri.c:575 +#, fuzzy +msgid "LOC URI malformed (could not find signature)" msgstr "SKS УРИ је лоше (не могу да нашем потпис)" -#: src/fs/fs_uri.c:565 src/fs/fs_uri.c:574 -msgid "SKS URI malformed (could not decode signature)" +#: src/fs/fs_uri.c:582 +#, fuzzy +msgid "LOC URI malformed (wrong syntax for signature)" +msgstr "SKS УРИ је лоше (не могу да нашем потпис)" + +#: src/fs/fs_uri.c:593 +#, fuzzy +msgid "LOC URI malformed (could not decode signature)" msgstr "SKS УРИ је лоше (не могу да декодирам потпис)" -#: src/fs/fs_uri.c:586 -msgid "SKS URI malformed (could not parse expiration time)" +#: src/fs/fs_uri.c:600 +#, fuzzy +msgid "LOC URI malformed (wrong syntax for expiration time)" +msgstr "SKS УРИ је лоше (не могу да обрадим време истека)" + +#: src/fs/fs_uri.c:606 +#, fuzzy +msgid "LOC URI malformed (could not parse expiration time)" msgstr "SKS УРИ је лоше (не могу да обрадим време истека)" -#: src/fs/fs_uri.c:598 -msgid "SKS URI malformed (signature failed validation)" +#: src/fs/fs_uri.c:620 +#, fuzzy +msgid "LOC URI malformed (signature failed validation)" msgstr "SKS УРИ је лоше (потврђивање потписа није успело)" -#: src/fs/fs_uri.c:636 +#: src/fs/fs_uri.c:653 +#, fuzzy +msgid "invalid argument" +msgstr "Неисправан аргумент „%s“\n" + +#: src/fs/fs_uri.c:665 msgid "Unrecognized URI type" msgstr "Непозната УРИ врста" -#: src/fs/fs_uri.c:860 -msgid "Lacking key configuration settings.\n" -msgstr "Недостају поставке подешавања кључа.\n" - -#: src/fs/fs_uri.c:866 -#, c-format -msgid "Could not access hostkey file `%s'.\n" -msgstr "Не могу да приступим датотеци кључа домаћина „%s“.\n" - -#: src/fs/fs_uri.c:1050 src/fs/fs_uri.c:1077 +#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098 msgid "No keywords specified!\n" msgstr "Нису наведене речи кључа!\n" -#: src/fs/fs_uri.c:1083 +#: src/fs/fs_uri.c:1104 msgid "Number of double-quotes not balanced!\n" msgstr "Број двоструких квота које нису уравнотежене!\n" -#: src/fs/gnunet-auto-share.c:236 +#: src/fs/gnunet-auto-share.c:234 #, c-format msgid "Failed to load state: %s\n" msgstr "Нисам успео да учитам стање: %s\n" -#: src/fs/gnunet-auto-share.c:289 src/fs/gnunet-auto-share.c:299 -#: src/fs/gnunet-auto-share.c:309 +#: src/fs/gnunet-auto-share.c:287 src/fs/gnunet-auto-share.c:296 +#: src/fs/gnunet-auto-share.c:304 #, c-format msgid "Failed to save state to file %s\n" msgstr "Нисам успео да сачувам стање у датотеку „%s“\n" @@ -2961,1140 +3165,1246 @@ msgstr "Нисам успео да сачувам стање у датотеку msgid "Publication of `%s' done\n" msgstr "Објављивање „%s“ је готово\n" -#: src/fs/gnunet-auto-share.c:488 +#: src/fs/gnunet-auto-share.c:480 #, c-format msgid "Publishing `%s'\n" msgstr "Објављујем „%s“\n" -#: src/fs/gnunet-auto-share.c:497 +#: src/fs/gnunet-auto-share.c:491 #, c-format msgid "Failed to run `%s'\n" msgstr "Нисам успео да покренем „%s“\n" -#: src/fs/gnunet-auto-share.c:686 +#: src/fs/gnunet-auto-share.c:661 #, c-format -msgid "You must specify one and only one directory name for automatic publication.\n" -msgstr "Морате навести један и само један назив директоријума за самостално објављивање.\n" +msgid "" +"You must specify one and only one directory name for automatic publication.\n" +msgstr "" +"Морате навести један и само један назив директоријума за самостално " +"објављивање.\n" -#: src/fs/gnunet-auto-share.c:737 src/fs/gnunet-publish.c:824 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "поставља жељени НИВО анонимности пошиљаоца" -#: src/fs/gnunet-auto-share.c:741 src/fs/gnunet-publish.c:828 +#: src/fs/gnunet-auto-share.c:718 msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "искључује додавање времена стварања метаподацима утоварене датотеке" -#: src/fs/gnunet-auto-share.c:744 src/fs/gnunet-publish.c:831 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "не користи „libextractor“ за додавање кључних речи или метаподатака" -#: src/fs/gnunet-auto-share.c:747 src/fs/gnunet-publish.c:855 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "наводи приоритет садржаја" -#: src/fs/gnunet-auto-share.c:750 src/fs/gnunet-publish.c:862 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "поставља жељени НИВО одоговарања" -#: src/fs/gnunet-auto-share.c:770 +#: src/fs/gnunet-auto-share.c:761 msgid "Automatically publish files from a directory on GNUnet" msgstr "Самостално објављује датотеке из директоријума на ГНУнет-у" -#: src/fs/gnunet-daemon-fsprofiler.c:660 +#: src/fs/gnunet-daemon-fsprofiler.c:667 msgid "Daemon to use file-sharing to measure its performance." msgstr "Демон за коришћење дељења датотеке за мерење њене учинковитости." -#: src/fs/gnunet-directory.c:49 +#: src/fs/gnunet-directory.c:53 #, c-format msgid "\t\n" msgstr "\t<изворна датотека угнеждена у %u бајта метаподатака>\n" -#: src/fs/gnunet-directory.c:94 +#: src/fs/gnunet-directory.c:105 #, c-format msgid "Directory `%s' meta data:\n" msgstr "Метаподаци директоријума „%s“:\n" -#: src/fs/gnunet-directory.c:97 +#: src/fs/gnunet-directory.c:108 #, c-format msgid "Directory `%s' contents:\n" msgstr "Садржај директоријума „%s“:\n" -#: src/fs/gnunet-directory.c:132 +#: src/fs/gnunet-directory.c:145 msgid "You must specify a filename to inspect.\n" msgstr "Морате навести назив датотеке за преглед.\n" -#: src/fs/gnunet-directory.c:145 +#: src/fs/gnunet-directory.c:159 #, c-format msgid "Failed to read directory `%s'\n" msgstr "Нисам успео да прочитам директоријум „%s“\n" -#: src/fs/gnunet-directory.c:154 +#: src/fs/gnunet-directory.c:169 #, c-format msgid "`%s' is not a GNUnet directory\n" msgstr "„%s“ није ГНУнет директоријум\n" -#: src/fs/gnunet-directory.c:183 +#: src/fs/gnunet-directory.c:200 msgid "Display contents of a GNUnet directory" msgstr "Приказује садржај ГНУнет директоријума" -#: src/fs/gnunet-download.c:137 +#: src/fs/gnunet-download.c:130 #, c-format msgid "Starting download `%s'.\n" msgstr "Покрећем преузимање „%s“.\n" -#: src/fs/gnunet-download.c:147 +#: src/fs/gnunet-download.c:142 msgid "" msgstr "<непознато време>" -#: src/fs/gnunet-download.c:157 +#: src/fs/gnunet-download.c:154 #, c-format -msgid "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to download\n" -msgstr "Преузимам „%s“ при %llu/%llu (преостаје %s, %s/сек). Блоку је требало %s за преузимање\n" +msgid "" +"Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to " +"download\n" +msgstr "" +"Преузимам „%s“ при %llu/%llu (преостаје %s, %s/сек). Блоку је требало %s за " +"преузимање\n" -#: src/fs/gnunet-download.c:179 +#: src/fs/gnunet-download.c:176 #, c-format msgid "Error downloading: %s.\n" msgstr "Грешка преузимања: %s.\n" -#: src/fs/gnunet-download.c:194 +#: src/fs/gnunet-download.c:188 #, c-format msgid "Downloading `%s' done (%s/s).\n" msgstr "Преузимање „%s“ је готово (%s/сек).\n" -#: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:286 -#: src/fs/gnunet-search.c:200 src/fs/gnunet-unindex.c:108 +#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299 +#: src/fs/gnunet-search.c:226 src/fs/gnunet-unindex.c:117 #, c-format msgid "Unexpected status: %d\n" msgstr "Неочекивано стање: %d\n" -#: src/fs/gnunet-download.c:234 +#: src/fs/gnunet-download.c:233 msgid "You need to specify a URI argument.\n" msgstr "Треба да наведете УРИ аргумент.\n" -#: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:665 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, c-format msgid "Failed to parse URI: %s\n" msgstr "Нисам успео да обрадим УРИ: %s\n" -#: src/fs/gnunet-download.c:247 +#: src/fs/gnunet-download.c:246 msgid "Only CHK or LOC URIs supported.\n" msgstr "Подржани су само CHK или LOC УРИ.\n" -#: src/fs/gnunet-download.c:254 +#: src/fs/gnunet-download.c:253 msgid "Target filename must be specified.\n" msgstr "Назив циљне датотеке мора бити наведен.\n" -#: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:797 -#: src/fs/gnunet-search.c:250 src/fs/gnunet-unindex.c:140 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 +#: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, c-format msgid "Could not initialize `%s' subsystem.\n" msgstr "Не могу да покренем „%s“ субсистем.\n" -#: src/fs/gnunet-download.c:305 src/fs/gnunet-search.c:289 +#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:331 msgid "set the desired LEVEL of receiver-anonymity" msgstr "поставља жељени НИВО анонимности примаоца" -#: src/fs/gnunet-download.c:308 +#: src/fs/gnunet-download.c:324 msgid "delete incomplete downloads (when aborted with CTRL-C)" msgstr "брише недовршена преузимања (када се прекине са КТРЛ-Ц)" -#: src/fs/gnunet-download.c:311 src/fs/gnunet-search.c:292 +#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:336 msgid "only search the local peer (no P2P network search)" msgstr "тражи само локалног парњака (без претраге П2П мреже)" -#: src/fs/gnunet-download.c:314 +#: src/fs/gnunet-download.c:335 msgid "write the file to FILENAME" msgstr "уписује датотеку у НАЗИВ_ДАТОТЕКЕ" -#: src/fs/gnunet-download.c:318 +#: src/fs/gnunet-download.c:342 msgid "set the maximum number of parallel downloads that is allowed" msgstr "поставља највећи број паралелних преузимања који је дозвољен" -#: src/fs/gnunet-download.c:322 +#: src/fs/gnunet-download.c:349 msgid "set the maximum number of parallel requests for blocks that is allowed" msgstr "поставља највећи број паралелних захтева за блокове који је дозвољен" -#: src/fs/gnunet-download.c:325 +#: src/fs/gnunet-download.c:354 msgid "download a GNUnet directory recursively" msgstr "преузима ГНУнет директоријум дубински" -#: src/fs/gnunet-download.c:339 -msgid "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/chk/...)" -msgstr "Преузима датотеке са ГНУнет-а користећи ГНУнет CHK или LOC УРИ (gnunet://fs/chk/...)" +#: src/fs/gnunet-download.c:373 +msgid "" +"Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/" +"chk/...)" +msgstr "" +"Преузима датотеке са ГНУнет-а користећи ГНУнет CHK или LOC УРИ (gnunet://fs/" +"chk/...)" -#: src/fs/gnunet-fs.c:117 +#: src/fs/gnunet-fs.c:128 msgid "print a list of all indexed files" msgstr "исписује списак свих индексираних датотека" -#: src/fs/gnunet-fs.c:127 +#: src/fs/gnunet-fs.c:141 msgid "Special file-sharing operations" msgstr "Посебне радње дељења датотека" -#: src/fs/gnunet-fs-profiler.c:193 +#: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "одрађује експеримент са БРОЈ парњака" -#: src/fs/gnunet-fs-profiler.c:196 +#: src/fs/gnunet-fs-profiler.c:218 msgid "specifies name of a file with the HOSTS the testbed should use" msgstr "наводи назив датотеке са ДОМАЋИНИМА коју пробно место треба да користи" -#: src/fs/gnunet-fs-profiler.c:199 +#: src/fs/gnunet-fs-profiler.c:225 msgid "automatically terminate experiment after DELAY" msgstr "самостално окончава експеримент након ЗАСТОЈА" -#: src/fs/gnunet-fs-profiler.c:208 +#: src/fs/gnunet-fs-profiler.c:237 msgid "run a testbed to measure file-sharing performance" msgstr "покреће пробно место за мерење учинковитости дељења датотека" -#: src/fs/gnunet-publish.c:231 src/fs/gnunet-publish.c:243 +#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" msgstr "Објављујем „%s“ при %llu/%llu (преостаје %s)\n" -#: src/fs/gnunet-publish.c:250 +#: src/fs/gnunet-publish.c:246 #, c-format msgid "Error publishing: %s.\n" msgstr "Грешка објављивања: %s.\n" -#: src/fs/gnunet-publish.c:260 +#: src/fs/gnunet-publish.c:254 #, c-format msgid "Publishing `%s' done.\n" msgstr "Објављивање „%s“ је готово.\n" -#: src/fs/gnunet-publish.c:264 +#: src/fs/gnunet-publish.c:258 #, c-format msgid "URI is `%s'.\n" msgstr "УРИ је „%s“.\n" -#: src/fs/gnunet-publish.c:283 -msgid "Cleanup after abort complete.\n" +#: src/fs/gnunet-publish.c:264 +#, fuzzy, c-format +msgid "Namespace URI is `%s'.\n" +msgstr "УРИ је „%s“.\n" + +#: src/fs/gnunet-publish.c:279 +#, fuzzy +msgid "Starting cleanup after abort\n" +msgstr "Чисти након обављеног прекидања.\n" + +#: src/fs/gnunet-publish.c:286 +#, fuzzy +msgid "Cleanup after abort completed.\n" msgstr "Чисти након обављеног прекидања.\n" -#: src/fs/gnunet-publish.c:401 +#: src/fs/gnunet-publish.c:291 +#, fuzzy +msgid "Cleanup after abort failed.\n" +msgstr "Чисти након обављеног прекидања.\n" + +#: src/fs/gnunet-publish.c:425 #, c-format msgid "Meta data for file `%s' (%s)\n" msgstr "Мета подаци за датотеку „%s“ (%s)\n" -#: src/fs/gnunet-publish.c:403 +#: src/fs/gnunet-publish.c:427 #, c-format msgid "Keywords for file `%s' (%s)\n" msgstr "Кључне речи за датотеку „%s“ (%s)\n" -#: src/fs/gnunet-publish.c:542 +#: src/fs/gnunet-publish.c:582 msgid "Could not publish\n" msgstr "Не могу да објавим\n" -#: src/fs/gnunet-publish.c:565 +#: src/fs/gnunet-publish.c:611 msgid "Could not start publishing.\n" msgstr "Не могу да покренем објављивање.\n" -#: src/fs/gnunet-publish.c:598 +#: src/fs/gnunet-publish.c:644 #, c-format msgid "Scanning directory `%s'.\n" msgstr "Скенирам директоријум „%s“.\n" -#: src/fs/gnunet-publish.c:600 +#: src/fs/gnunet-publish.c:646 #, c-format msgid "Scanning file `%s'.\n" msgstr "Скенирам датотеку „%s“.\n" -#: src/fs/gnunet-publish.c:605 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "Било је проблема обраде датотеке „%s“, прескачем је.\n" -#: src/fs/gnunet-publish.c:610 +#: src/fs/gnunet-publish.c:658 msgid "Preprocessing complete.\n" msgstr "Предодбрада је завршена.\n" -#: src/fs/gnunet-publish.c:614 +#: src/fs/gnunet-publish.c:664 #, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "Извлачење мета података из датотеке „%s“ је завршено.\n" -#: src/fs/gnunet-publish.c:618 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "Извлачење мета података је завршено.\n" -#: src/fs/gnunet-publish.c:625 -msgid "Internal error scanning directory.\n" +#: src/fs/gnunet-publish.c:678 +#, fuzzy +msgid "Error scanning directory.\n" msgstr "Унутрашња грешка скенирања директоријума.\n" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:705 #, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "Изабрани псеудоним „%s“ је непознат\n" -#: src/fs/gnunet-publish.c:682 +#: src/fs/gnunet-publish.c:737 #, c-format msgid "Failed to access `%s': %s\n" msgstr "Нисам успео да приступим „%s“: %s\n" -#: src/fs/gnunet-publish.c:695 -msgid "Failed to start meta directory scanner. Is gnunet-helper-publish-fs installed?\n" -msgstr "Нисам успео да покренем скенер мета директоријума. Да ли је инсталиран „gnunet-helper-publish-fs“?\n" +#: src/fs/gnunet-publish.c:754 +msgid "" +"Failed to start meta directory scanner. Is gnunet-helper-publish-fs " +"installed?\n" +msgstr "" +"Нисам успео да покренем скенер мета директоријума. Да ли је инсталиран " +"„gnunet-helper-publish-fs“?\n" -#: src/fs/gnunet-publish.c:747 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "Не могу да извучем метаподатке из УРИ-ја!\n" -#: src/fs/gnunet-publish.c:754 +#: src/fs/gnunet-publish.c:817 #, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "Морате навести један и само један назив датотеке за уметање.\n" -#: src/fs/gnunet-publish.c:760 +#: src/fs/gnunet-publish.c:823 #, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "НЕ можете навести УРИ и назив датотеке.\n" -#: src/fs/gnunet-publish.c:768 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "Опција „%s“ се захтева приликом коришћења опције „%s“.\n" -#: src/fs/gnunet-publish.c:778 src/fs/gnunet-publish.c:785 -#: src/transport/gnunet-transport.c:1284 src/transport/gnunet-transport.c:1314 -#: src/transport/gnunet-transport.c:1344 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 +#: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "Опција „%s“ нема смисла без опције „%s“.\n" -#: src/fs/gnunet-publish.c:835 -msgid "print list of extracted keywords that would be used, but do not perform upload" -msgstr "исписује списак извучених кључних речи које ће се користити, али не обавља утовар" +#: src/fs/gnunet-publish.c:906 +#, fuzzy +msgid "enable adding the creation time to the metadata of the uploaded file" +msgstr "искључује додавање времена стварања метаподацима утоварене датотеке" + +#: src/fs/gnunet-publish.c:912 +msgid "" +"print list of extracted keywords that would be used, but do not perform " +"upload" +msgstr "" +"исписује списак извучених кључних речи које ће се користити, али не обавља " +"утовар" -#: src/fs/gnunet-publish.c:839 -msgid "add an additional keyword for the top-level file or directory (this option can be specified multiple times)" -msgstr "додаје додатну кључну реч за датотеку највишег нивоа или директоријум (ова опција се може навести више пута)" +#: src/fs/gnunet-publish.c:920 +msgid "" +"add an additional keyword for the top-level file or directory (this option " +"can be specified multiple times)" +msgstr "" +"додаје додатну кључну реч за датотеку највишег нивоа или директоријум (ова " +"опција се може навести више пута)" -#: src/fs/gnunet-publish.c:843 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "поставља мета-податке за дату ВРСТУ за дату ВРЕДНОСТ" -#: src/fs/gnunet-publish.c:846 -msgid "do not index, perform full insertion (stores entire file in encrypted form in GNUnet database)" -msgstr "не индексира, обавља пуно уметање (смешта читаву датотеку у шифрованом облику у ГНУнет базу података)" +#: src/fs/gnunet-publish.c:932 +msgid "" +"do not index, perform full insertion (stores entire file in encrypted form " +"in GNUnet database)" +msgstr "" +"не индексира, обавља пуно уметање (смешта читаву датотеку у шифрованом " +"облику у ГНУнет базу података)" -#: src/fs/gnunet-publish.c:851 -msgid "specify ID of an updated version to be published in the future (for namespace insertions only)" -msgstr "наводи ИБ ажурираног издања које ће бити објављено у будућности (само за уметања називног простора)" +#: src/fs/gnunet-publish.c:939 +msgid "" +"specify ID of an updated version to be published in the future (for " +"namespace insertions only)" +msgstr "" +"наводи ИБ ажурираног издања које ће бити објављено у будућности (само за " +"уметања називног простора)" -#: src/fs/gnunet-publish.c:859 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" -msgstr "објављује датотеке под псеудонимом НАЗИВ (ставља датотеку у називни простор)" +msgstr "" +"објављује датотеке под псеудонимом НАЗИВ (ставља датотеку у називни простор)" -#: src/fs/gnunet-publish.c:865 -msgid "only simulate the process but do not do any actual publishing (useful to compute URIs)" -msgstr "само опонаша процес али не чини никакво актуелно објављивање (корисно за прорачун УРИ-ја)" +#: src/fs/gnunet-publish.c:964 +msgid "" +"only simulate the process but do not do any actual publishing (useful to " +"compute URIs)" +msgstr "" +"само опонаша процес али не чини никакво актуелно објављивање (корисно за " +"прорачун УРИ-ја)" -#: src/fs/gnunet-publish.c:869 -msgid "set the ID of this version of the publication (for namespace insertions only)" -msgstr "поставља ИБ овог издања објављивања (само за уметања називног простора)" +#: src/fs/gnunet-publish.c:971 +msgid "" +"set the ID of this version of the publication (for namespace insertions only)" +msgstr "" +"поставља ИБ овог издања објављивања (само за уметања називног простора)" -#: src/fs/gnunet-publish.c:873 -msgid "URI to be published (can be used instead of passing a file to add keywords to the file with the respective URI)" -msgstr "УРИ који ће бити објављен (може се користити уместо прослеђивања датотеке за додавање кључних речи датотеци са одговарајућим УРИ-јем)" +#: src/fs/gnunet-publish.c:979 +msgid "" +"URI to be published (can be used instead of passing a file to add keywords " +"to the file with the respective URI)" +msgstr "" +"УРИ који ће бити објављен (може се користити уместо прослеђивања датотеке за " +"додавање кључних речи датотеци са одговарајућим УРИ-јем)" -#: src/fs/gnunet-publish.c:889 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "Објављује датотеку или директоријум на ГНУнет-у" -#: src/fs/gnunet-search.c:114 +#: src/fs/gnunet-search.c:127 #, c-format msgid "Failed to write directory with search results to `%s'\n" msgstr "Нисам успео да пишем директоријум са резултатима претраге за „%s“\n" -#: src/fs/gnunet-search.c:191 +#: src/fs/gnunet-search.c:216 #, c-format msgid "Error searching: %s.\n" msgstr "Грешка претраге: %s.\n" -#: src/fs/gnunet-search.c:240 +#: src/fs/gnunet-search.c:278 msgid "Could not create keyword URI from arguments.\n" msgstr "Не могу да створим УРИ кључне речи из аргумената.\n" -#: src/fs/gnunet-search.c:264 +#: src/fs/gnunet-search.c:305 msgid "Could not start searching.\n" msgstr "Не могу да покренем претрагу.\n" -#: src/fs/gnunet-search.c:295 +#: src/fs/gnunet-search.c:342 msgid "write search results to file starting with PREFIX" msgstr "пише резултате претраге у датотеку која почиње са ПРЕФИКСОМ" -#: src/fs/gnunet-search.c:298 +#: src/fs/gnunet-search.c:348 msgid "automatically terminate search after DELAY" msgstr "самостално окончава претрагу након ЗАСТОЈА" -#: src/fs/gnunet-search.c:305 +#: src/fs/gnunet-search.c:354 msgid "automatically terminate search after VALUE results are found" msgstr "самостално окончава претрагу након што су пронађени резултати ВРЕДНОСТ" -#: src/fs/gnunet-search.c:316 +#: src/fs/gnunet-search.c:368 msgid "Search GNUnet for files that were published on GNUnet" msgstr "Претражује ГНУнет за датотекама које су објављене на ГНУнет-у" -#: src/fs/gnunet-service-fs.c:271 +#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878 +msgid "# client searches active" +msgstr "# претраге клијента су активне" + +#: src/fs/gnunet-service-fs.c:430 +msgid "# replies received for local clients" +msgstr "# одговори су примљени за локалне клијенте" + +#: src/fs/gnunet-service-fs.c:596 msgid "# running average P2P latency (ms)" msgstr "# радно просечно П2П кашњење (ms)" -#: src/fs/gnunet-service-fs.c:326 src/fs/gnunet-service-fs.c:539 +#: src/fs/gnunet-service-fs.c:648 src/fs/gnunet-service-fs_cp.c:558 msgid "# Loopback routes suppressed" msgstr "# Руте петље су потиснуте" -#: src/fs/gnunet-service-fs.c:639 src/hostlist/gnunet-daemon-hostlist.c:288 -#: src/topology/gnunet-daemon-topology.c:1254 -#: src/topology/gnunet-daemon-topology.c:1261 +#: src/fs/gnunet-service-fs.c:831 +msgid "# client searches received" +msgstr "# претраге клијента су примљене" + +#: src/fs/gnunet-service-fs.c:871 +msgid "# client searches updated (merged content seen list)" +msgstr "# претраге клијента су освежене (стопљени садржај виђеног списка)" + +#: src/fs/gnunet-service-fs.c:1041 +#, fuzzy, c-format +msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n" +msgstr "" +"Неодговарајући хеш приликом покушаја индексирања датотеке „%s“ која има хеш " +"„%s“\n" + +#: src/fs/gnunet-service-fs.c:1282 +#, fuzzy +msgid "FS service is lacking HOSTKEY configuration setting. Exiting.\n" +msgstr "" +"Услузи језгра недостаје поставка подешавања КЉУЧА_ДОМАЋИНА. Излазим.\n" + +#: src/fs/gnunet-service-fs.c:1316 src/hostlist/gnunet-daemon-hostlist.c:343 +#: src/topology/gnunet-daemon-topology.c:1098 #, c-format msgid "Failed to connect to `%s' service.\n" msgstr "Нисам успео да се повежем са „%s“ услугом.\n" -#: src/fs/gnunet-service-fs_cp.c:682 +#: src/fs/gnunet-service-fs_cadet_client.c:353 +#, fuzzy +msgid "# replies received via cadet" +msgstr "# одговори су примљени путем меша" + +#: src/fs/gnunet-service-fs_cadet_client.c:369 +#, fuzzy +msgid "# replies received via cadet dropped" +msgstr "# одговори су примљени путем одбаченог меша" + +#: src/fs/gnunet-service-fs_cadet_server.c:263 +#, fuzzy +msgid "# queries received via CADET not answered" +msgstr "# упити су примљени путем неодговореног меша" + +#: src/fs/gnunet-service-fs_cadet_server.c:318 +#, fuzzy +msgid "# Blocks transferred via cadet" +msgstr "# Блокови су пренесени путем меша" + +#: src/fs/gnunet-service-fs_cadet_server.c:344 +#, fuzzy +msgid "# queries received via cadet" +msgstr "# упути су примљени путем меша" + +#: src/fs/gnunet-service-fs_cadet_server.c:387 +#, fuzzy +msgid "# cadet client connections rejected" +msgstr "# везе меш клијента су одбијене" + +#: src/fs/gnunet-service-fs_cadet_server.c:394 +#: src/fs/gnunet-service-fs_cadet_server.c:434 +#, fuzzy +msgid "# cadet connections active" +msgstr "# меш везе су радне" + +#: src/fs/gnunet-service-fs_cp.c:680 msgid "# migration stop messages received" msgstr "# поруке заустављања миграције су примљене" -#: src/fs/gnunet-service-fs_cp.c:686 +#: src/fs/gnunet-service-fs_cp.c:684 #, c-format msgid "Migration of content to peer `%s' blocked for %s\n" msgstr "Премештање садржаја за парњака „%s“ је блокирано за %s\n" -#: src/fs/gnunet-service-fs_cp.c:721 -msgid "# replies transmitted to other peers" -msgstr "# одговори су пренесени другим парњацима" - -#: src/fs/gnunet-service-fs_cp.c:727 -msgid "# replies dropped" -msgstr "# одговори су одбачени" - -#: src/fs/gnunet-service-fs_cp.c:752 src/fs/gnunet-service-fs_cp.c:1301 +#: src/fs/gnunet-service-fs_cp.c:717 src/fs/gnunet-service-fs_cp.c:1345 msgid "# P2P searches active" msgstr "# П2П претраге су активне" -#: src/fs/gnunet-service-fs_cp.c:845 +#: src/fs/gnunet-service-fs_cp.c:812 msgid "# artificial delays introduced (ms)" msgstr "# вештачка кашњења су уведена (ms)" -#: src/fs/gnunet-service-fs_cp.c:898 +#: src/fs/gnunet-service-fs_cp.c:869 msgid "# replies dropped due to type mismatch" msgstr "# одговори су одбачени услед непоклапања врсте" -#: src/fs/gnunet-service-fs_cp.c:906 +#: src/fs/gnunet-service-fs_cp.c:877 msgid "# replies received for other peers" msgstr "# одговори су примљени за друге парњаке" -#: src/fs/gnunet-service-fs_cp.c:920 +#: src/fs/gnunet-service-fs_cp.c:892 msgid "# replies dropped due to insufficient cover traffic" msgstr "# одговори су одбачени услед недовољног покривног саобраћаја" -#: src/fs/gnunet-service-fs_cp.c:958 +#: src/fs/gnunet-service-fs_cp.c:940 msgid "# P2P searches destroyed due to ultimate reply" msgstr "# П2П претраге су уништене због крајњег одговора" -#: src/fs/gnunet-service-fs_cp.c:1026 +#: src/fs/gnunet-service-fs_cp.c:1011 msgid "# requests done for free (low load)" msgstr "# захтева је готово за џабе (слабо учитавање)" -#: src/fs/gnunet-service-fs_cp.c:1051 +#: src/fs/gnunet-service-fs_cp.c:1036 msgid "# request dropped, priority insufficient" msgstr "# захтева је одбачено, недовољно хитности" -#: src/fs/gnunet-service-fs_cp.c:1061 +#: src/fs/gnunet-service-fs_cp.c:1046 msgid "# requests done for a price (normal load)" msgstr "# захтева је готово за цену (нормално учитавање)" -#: src/fs/gnunet-service-fs_cp.c:1139 +#: src/fs/gnunet-service-fs_cp.c:1143 +msgid "# requests dropped due to higher-TTL request" +msgstr "# захтеви су одбачени услед вишег-ТТЛ захтева" + +#: src/fs/gnunet-service-fs_cp.c:1201 msgid "# GET requests received (from other peers)" msgstr "# „GET“ захтеви су примљени (од других парњака)" -#: src/fs/gnunet-service-fs_cp.c:1173 -msgid "# requests dropped due to initiator not being connected" -msgstr "# захтеви су одбачени јер покретач није повезан" - -#: src/fs/gnunet-service-fs_cp.c:1195 +#: src/fs/gnunet-service-fs_cp.c:1225 msgid "# requests dropped due to missing reverse route" msgstr "# захтеви су одбачени јер недостаје повратна рута" -#: src/fs/gnunet-service-fs_cp.c:1246 +#: src/fs/gnunet-service-fs_cp.c:1239 +#, fuzzy +msgid "# requests dropped due to full reply queue" +msgstr "# П2П поруке су одбачене због пуног реда" + +#: src/fs/gnunet-service-fs_cp.c:1296 msgid "# requests dropped due TTL underflow" msgstr "# захтеви су одбачени услед ниског ТТЛ тока" -#: src/fs/gnunet-service-fs_cp.c:1270 -msgid "# requests dropped due to higher-TTL request" -msgstr "# захтеви су одбачени услед вишег-ТТЛ захтева" - -#: src/fs/gnunet-service-fs_cp.c:1299 +#: src/fs/gnunet-service-fs_cp.c:1341 msgid "# P2P query messages received and processed" msgstr "# поруке П2П упита су примљене и обрађене" -#: src/fs/gnunet-service-fs_cp.c:1670 +#: src/fs/gnunet-service-fs_cp.c:1711 msgid "# migration stop messages sent" msgstr "# поруке зауставља миграције су послате" #: src/fs/gnunet-service-fs_indexing.c:130 -#: src/fs/gnunet-service-fs_indexing.c:181 +#: src/fs/gnunet-service-fs_indexing.c:188 #, c-format msgid "Could not open `%s'.\n" msgstr "Не могу да отворим „%s“.\n" -#: src/fs/gnunet-service-fs_indexing.c:142 +#: src/fs/gnunet-service-fs_indexing.c:147 #, c-format msgid "Error writing `%s'.\n" msgstr "Грешка писања „%s“.\n" -#: src/fs/gnunet-service-fs_indexing.c:237 -#, c-format -msgid "Index request received for file `%s' is already indexed as `%s'. Permitting anyway.\n" -msgstr "Примљени захтев индексирања за датотеку „%s“ је већ индексиран „%s“. Ипак одобравам.\n" - -#: src/fs/gnunet-service-fs_indexing.c:275 -#, c-format -msgid "Hash mismatch trying to index file `%s' which has hash `%s'\n" -msgstr "Неодговарајући хеш приликом покушаја индексирања датотеке „%s“ која има хеш „%s“\n" - -#: src/fs/gnunet-service-fs_indexing.c:477 +#: src/fs/gnunet-service-fs_indexing.c:244 #, c-format msgid "Failed to delete bogus block: %s\n" msgstr "Нисам успео да обришем лажни блок: %s\n" -#: src/fs/gnunet-service-fs_indexing.c:542 +#: src/fs/gnunet-service-fs_indexing.c:317 msgid "# index blocks removed: original file inaccessible" msgstr "# блокови индекси су уклоњени: изворна датотека је неприступачна" -#: src/fs/gnunet-service-fs_indexing.c:557 +#: src/fs/gnunet-service-fs_indexing.c:331 #, c-format msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n" -msgstr "Не могу да приступим индексираној датотеци „%s“ (%s) на померају %llu: %s\n" +msgstr "" +"Не могу да приступим индексираној датотеци „%s“ (%s) на померају %llu: %s\n" -#: src/fs/gnunet-service-fs_indexing.c:559 +#: src/fs/gnunet-service-fs_indexing.c:335 msgid "not indexed" msgstr "није индексирано" -#: src/fs/gnunet-service-fs_indexing.c:574 +#: src/fs/gnunet-service-fs_indexing.c:349 #, c-format msgid "Indexed file `%s' changed at offset %llu\n" msgstr "Индексирана датотека „%s“ је измењена на померају %llu\n" -#: src/fs/gnunet-service-fs_lc.c:202 src/fs/gnunet-service-fs_lc.c:368 -msgid "# client searches active" -msgstr "# претраге клијента су активне" - -#: src/fs/gnunet-service-fs_lc.c:256 -msgid "# replies received for local clients" -msgstr "# одговори су примљени за локалне клијенте" - -#: src/fs/gnunet-service-fs_lc.c:327 -msgid "# client searches received" -msgstr "# претраге клијента су примљене" - -#: src/fs/gnunet-service-fs_lc.c:362 -msgid "# client searches updated (merged content seen list)" -msgstr "# претраге клијента су освежене (стопљени садржај виђеног списка)" - -#: src/fs/gnunet-service-fs_mesh_client.c:484 -msgid "# replies received via mesh" -msgstr "# одговори су примљени путем меша" - -#: src/fs/gnunet-service-fs_mesh_client.c:498 -msgid "# replies received via mesh dropped" -msgstr "# одговори су примљени путем одбаченог меша" - -#: src/fs/gnunet-service-fs_mesh_server.c:260 -msgid "# Blocks transferred via mesh" -msgstr "# Блокови су пренесени путем меша" - -#: src/fs/gnunet-service-fs_mesh_server.c:352 -msgid "# queries received via mesh not answered" -msgstr "# упити су примљени путем неодговореног меша" - -#: src/fs/gnunet-service-fs_mesh_server.c:432 -msgid "# queries received via mesh" -msgstr "# упути су примљени путем меша" - -#: src/fs/gnunet-service-fs_mesh_server.c:476 -msgid "# mesh client connections rejected" -msgstr "# везе меш клијента су одбијене" - -#: src/fs/gnunet-service-fs_mesh_server.c:482 -#: src/fs/gnunet-service-fs_mesh_server.c:522 -msgid "# mesh connections active" -msgstr "# меш везе су радне" +#: src/fs/gnunet-service-fs_indexing.c:455 +#, c-format +msgid "" +"Index request received for file `%s' is already indexed as `%s'. Permitting " +"anyway.\n" +msgstr "" +"Примљени захтев индексирања за датотеку „%s“ је већ индексиран „%s“. Ипак " +"одобравам.\n" -#: src/fs/gnunet-service-fs_pe.c:269 +#: src/fs/gnunet-service-fs_pe.c:260 msgid "# average retransmission delay (ms)" msgstr "# просечан застој поновног преноса (ms)" -#: src/fs/gnunet-service-fs_pe.c:400 -msgid "# transmission failed (core has no bandwidth)" -msgstr "# пренос није успео (језгро нема пропусни опсег)" - -#: src/fs/gnunet-service-fs_pe.c:433 -msgid "# query messages sent to other peers" -msgstr "# поруке упита су послате другим парњацима" - -#: src/fs/gnunet-service-fs_pe.c:484 +#: src/fs/gnunet-service-fs_pe.c:422 msgid "# delay heap timeout (ms)" msgstr "# истекло је време застоја скупине (ms)" -#: src/fs/gnunet-service-fs_pe.c:492 +#: src/fs/gnunet-service-fs_pe.c:433 msgid "# query plans executed" msgstr "# план упита је извршен" -#: src/fs/gnunet-service-fs_pe.c:552 +#: src/fs/gnunet-service-fs_pe.c:462 +msgid "# query messages sent to other peers" +msgstr "# поруке упита су послате другим парњацима" + +#: src/fs/gnunet-service-fs_pe.c:530 msgid "# requests merged" msgstr "# захтеви су стопљени" -#: src/fs/gnunet-service-fs_pe.c:560 +#: src/fs/gnunet-service-fs_pe.c:540 msgid "# requests refreshed" msgstr "# захтеви су освежени" -#: src/fs/gnunet-service-fs_pe.c:616 src/fs/gnunet-service-fs_pe.c:700 -#: src/fs/gnunet-service-fs_pe.c:771 +#: src/fs/gnunet-service-fs_pe.c:600 src/fs/gnunet-service-fs_pe.c:703 +#: src/fs/gnunet-service-fs_pe.c:786 msgid "# query plan entries" msgstr "# пропитује обичне уносе" -#: src/fs/gnunet-service-fs_pr.c:311 +#: src/fs/gnunet-service-fs_pr.c:329 msgid "# Pending requests created" msgstr "# Захтеви на чекању су створени" -#: src/fs/gnunet-service-fs_pr.c:394 src/fs/gnunet-service-fs_pr.c:645 +#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:656 msgid "# Pending requests active" msgstr "# Захтеви на чекању су активни" -#: src/fs/gnunet-service-fs_pr.c:814 +#: src/fs/gnunet-service-fs_pr.c:832 msgid "# replies received and matched" msgstr "# одговори су примљени и подударени" -#: src/fs/gnunet-service-fs_pr.c:844 +#: src/fs/gnunet-service-fs_pr.c:880 msgid "# duplicate replies discarded (bloomfilter)" msgstr "# двоструки одговори су одбачени (bloomfilter)" -#: src/fs/gnunet-service-fs_pr.c:853 +#: src/fs/gnunet-service-fs_pr.c:889 msgid "# irrelevant replies discarded" msgstr "# небитни одговори су одбачени" -#: src/fs/gnunet-service-fs_pr.c:867 +#: src/fs/gnunet-service-fs_pr.c:908 #, c-format msgid "Unsupported block type %u\n" msgstr "Неподржана врста блока %u\n" -#: src/fs/gnunet-service-fs_pr.c:880 +#: src/fs/gnunet-service-fs_pr.c:921 msgid "# results found locally" msgstr "# резултати су пронађени локално" -#: src/fs/gnunet-service-fs_pr.c:1001 +#: src/fs/gnunet-service-fs_pr.c:1055 msgid "# Datastore `PUT' failures" msgstr "# Неуспеси „СТАВИ“ смештаја података" -#: src/fs/gnunet-service-fs_pr.c:1029 +#: src/fs/gnunet-service-fs_pr.c:1084 msgid "# storage requests dropped due to high load" msgstr "# захтеви смештаја су одбачени услед високог утовара" -#: src/fs/gnunet-service-fs_pr.c:1064 +#: src/fs/gnunet-service-fs_pr.c:1123 msgid "# Replies received from DHT" msgstr "# Одговори су примљени од DHT-а" -#: src/fs/gnunet-service-fs_pr.c:1192 -msgid "# Replies received from MESH" -msgstr "# Одговори су примљени од MESH-а" +#: src/fs/gnunet-service-fs_pr.c:1264 +#, fuzzy +msgid "# Replies received from CADET" +msgstr "# Одговори су примљени од DHT-а" -#: src/fs/gnunet-service-fs_pr.c:1244 +#: src/fs/gnunet-service-fs_pr.c:1318 #, c-format msgid "Datastore lookup already took %s!\n" msgstr "Претрага смештаја података је већ узела „%s“!\n" -#: src/fs/gnunet-service-fs_pr.c:1264 +#: src/fs/gnunet-service-fs_pr.c:1339 #, c-format msgid "On-demand lookup already took %s!\n" msgstr "Претрага на-захтев је већ узела „%s“!\n" -#: src/fs/gnunet-service-fs_pr.c:1311 +#: src/fs/gnunet-service-fs_pr.c:1402 +msgid "# requested DBLOCK or IBLOCK not found" +msgstr "# захтевани DBLOCK или IBLOCK нису нађени" + +#: src/fs/gnunet-service-fs_pr.c:1464 +msgid "# Datastore lookups concluded (error queueing)" +msgstr "# Претраге смештаја података су закључене (грешка стављања у ред)" + +#: src/fs/gnunet-service-fs_pr.c:1519 msgid "# Datastore lookups concluded (no results)" msgstr "# Претраге смештаја података су закључене (нема резултата)" -#: src/fs/gnunet-service-fs_pr.c:1326 +#: src/fs/gnunet-service-fs_pr.c:1534 msgid "# Datastore lookups concluded (seen all)" msgstr "# Претраге смештаја података су закључене (видех све)" -#: src/fs/gnunet-service-fs_pr.c:1335 +#: src/fs/gnunet-service-fs_pr.c:1557 msgid "# Datastore lookups aborted (more than MAX_RESULTS)" msgstr "# Претраге смештаја података су прекинуте (више од „MAX_RESULTS“)" -#: src/fs/gnunet-service-fs_pr.c:1350 -msgid "# requested DBLOCK or IBLOCK not found" -msgstr "# захтевани DBLOCK или IBLOCK нису нађени" - -#: src/fs/gnunet-service-fs_pr.c:1364 +#: src/fs/gnunet-service-fs_pr.c:1574 msgid "# on-demand blocks matched requests" msgstr "# блокови на-захтев одговарају захтевима" -#: src/fs/gnunet-service-fs_pr.c:1377 +#: src/fs/gnunet-service-fs_pr.c:1595 msgid "# on-demand lookups performed successfully" msgstr "# претраге на-захтев су обављене успешно" -#: src/fs/gnunet-service-fs_pr.c:1382 +#: src/fs/gnunet-service-fs_pr.c:1601 msgid "# on-demand lookups failed" msgstr "# претраге на-захтев нису успеле" -#: src/fs/gnunet-service-fs_pr.c:1409 src/fs/gnunet-service-fs_pr.c:1449 -#: src/fs/gnunet-service-fs_pr.c:1590 -msgid "# Datastore lookups concluded (error queueing)" -msgstr "# Претраге смештаја података су закључене (грешка стављања у ред)" - -#: src/fs/gnunet-service-fs_pr.c:1467 +#: src/fs/gnunet-service-fs_pr.c:1642 msgid "# Datastore lookups concluded (found last result)" msgstr "# Претраге смештаја података су закључене (нађох последњи резултат)" -#: src/fs/gnunet-service-fs_pr.c:1478 +#: src/fs/gnunet-service-fs_pr.c:1655 msgid "# Datastore lookups concluded (load too high)" msgstr "# Претраге смештаја података су закључене (утовар је превелик)" -#: src/fs/gnunet-service-fs_pr.c:1566 +#: src/fs/gnunet-service-fs_pr.c:1706 msgid "# Datastore lookups initiated" msgstr "# Претраге смештаја података су покренуте" -#: src/fs/gnunet-service-fs_pr.c:1651 +#: src/fs/gnunet-service-fs_pr.c:1756 msgid "# GAP PUT messages received" msgstr "# поруке ЈАЗ СТАВИ су примљене" -#: src/fs/gnunet-service-fs_push.c:631 +#: src/fs/gnunet-service-fs_push.c:648 msgid "time required, content pushing disabled" msgstr "време је затражено, гурање садржаја је искључено" -#: src/fs/gnunet-unindex.c:89 +#: src/fs/gnunet-unindex.c:93 #, c-format msgid "Unindexing at %llu/%llu (%s remaining)\n" msgstr "Поништавам индексирање при %llu/%llu (преостаје %s)\n" -#: src/fs/gnunet-unindex.c:95 +#: src/fs/gnunet-unindex.c:102 #, c-format msgid "Error unindexing: %s.\n" msgstr "Грешка поништавања индексирања: %s.\n" -#: src/fs/gnunet-unindex.c:100 +#: src/fs/gnunet-unindex.c:108 msgid "Unindexing done.\n" msgstr "Поништавање индексирања је готово.\n" -#: src/fs/gnunet-unindex.c:130 +#: src/fs/gnunet-unindex.c:141 #, c-format msgid "You must specify one and only one filename for unindexing.\n" -msgstr "Морате навести један и само један назив датотеке за поништавање индексирања.\n" +msgstr "" +"Морате навести један и само један назив датотеке за поништавање " +"индексирања.\n" -#: src/fs/gnunet-unindex.c:147 +#: src/fs/gnunet-unindex.c:161 msgid "Could not start unindex operation.\n" msgstr "Не могу да започнем радњу поништавања индексирања.\n" -#: src/fs/gnunet-unindex.c:179 +#: src/fs/gnunet-unindex.c:194 msgid "Unindex a file that was previously indexed with gnunet-publish." -msgstr "Поништава индексирање датотеке која је претходно била индексирана са „gnunet-publish“." +msgstr "" +"Поништава индексирање датотеке која је претходно била индексирана са „gnunet-" +"publish“." -#: src/gns/gns_api.c:393 -msgid "Failed to deserialize lookup reply from GNS service!\n" -msgstr "Нисам успео да десеријализујем одговор претраге са ГНС услуге!\n" +#: src/gns/gns_tld_api.c:293 +msgid "Expected a base32-encoded public zone key\n" +msgstr "" -#: src/gns/gnunet-bcd.c:123 +#: src/gns/gnunet-bcd.c:133 #, c-format msgid "Refusing `%s' request to HTTP server\n" msgstr "Одбијам „%s“ захтев за ХТТП сервер\n" -#: src/gns/gnunet-bcd.c:355 src/hostlist/hostlist-server.c:567 -#, c-format -msgid "Invalid port number %llu. Exiting.\n" +#: src/gns/gnunet-bcd.c:347 +#, fuzzy, c-format +msgid "Invalid port number %u. Exiting.\n" msgstr "Неисправан број прикључника %llu. Излазим.\n" -#: src/gns/gnunet-bcd.c:360 -#, c-format -msgid "Businesscard HTTP server starts on %llu\n" +#: src/gns/gnunet-bcd.c:352 +#, fuzzy, c-format +msgid "Businesscard HTTP server starts on %u\n" msgstr "ХТТП сервер пословне картице почиње на %llu\n" -#: src/gns/gnunet-bcd.c:374 +#: src/gns/gnunet-bcd.c:372 #, c-format msgid "Could not start businesscard HTTP server on port %u\n" msgstr "Не могу да покренем ХТТП сервер пословне картице на прикључнику %u\n" -#: src/gns/gnunet-bcd.c:519 +#: src/gns/gnunet-bcd.c:509 msgid "Run HTTP serve on port PORT (default is 8888)" msgstr "Покрећем ХТТП сервер на прикључнику ПРИКЉУЧНИК (основно је 8888)" -#: src/gns/gnunet-bcd.c:531 +#: src/gns/gnunet-bcd.c:522 msgid "GNUnet HTTP server to create business cards" msgstr "ГНУнет ХТТП сервер за стварање бизнис картица" -#: src/gns/gnunet-dns2gns.c:228 +#: src/gns/gnunet-dns2gns.c:241 msgid "Failed to pack DNS response into UDP packet!\n" msgstr "Нисам успео да упакујем ДНС одговор у УДП пакет!\n" -#: src/gns/gnunet-dns2gns.c:400 +#: src/gns/gnunet-dns2gns.c:444 #, c-format msgid "Cannot parse DNS request from %s\n" msgstr "Не могу да обрадим ДНС захтев од „%s“\n" -#: src/gns/gnunet-dns2gns.c:416 +#: src/gns/gnunet-dns2gns.c:460 #, c-format msgid "Received malformed DNS request from %s\n" msgstr "Примих лош ДНС захтев од „%s“\n" -#: src/gns/gnunet-dns2gns.c:424 +#: src/gns/gnunet-dns2gns.c:468 #, c-format msgid "Received unsupported DNS request from %s\n" msgstr "Примих неподржан ДНС захтев од „%s“\n" -#: src/gns/gnunet-dns2gns.c:701 -msgid "No ego configured for `dns2gns` subsystem\n" -msgstr "Није подешен его за „dns2gns“ подсистем\n" - -#: src/gns/gnunet-dns2gns.c:727 +#: src/gns/gnunet-dns2gns.c:629 msgid "No DNS server specified!\n" msgstr "Није наведен ДНС сервер!\n" -#: src/gns/gnunet-dns2gns.c:749 -msgid "No valid GNS zone specified!\n" -msgstr "Није наведена исправна ГНС зона!\n" - -#: src/gns/gnunet-dns2gns.c:770 +#: src/gns/gnunet-dns2gns.c:778 msgid "IP of recursive DNS resolver to use (required)" msgstr "ИП дубинског ДНС решавача за коришћење (потребно)" -#: src/gns/gnunet-dns2gns.c:773 -msgid "Authoritative FCFS suffix to use (optional); default: fcfs.zkey.eu" -msgstr "Ауторитативни ФЦФС суфикс за коришћење (изборно); основно: fcfs.zkey.eu" - -#: src/gns/gnunet-dns2gns.c:776 -msgid "Authoritative DNS suffix to use (optional); default: zkey.eu" -msgstr "Ауторитативни ДНС суфикс за коришћење (изборно); основно: zkey.eu" - -#: src/gns/gnunet-dns2gns.c:779 -msgid "UDP port to listen on for inbound DNS requests; default: 53" -msgstr "УДП прикључник на коме ће ослушкивати за долазним ДНС захтевима; основно: 53" - -#: src/gns/gnunet-dns2gns.c:782 -msgid "Public key of the GNS zone to use (overrides default)" -msgstr "Јавни кључ ГНС зоне за коришћење (преписује основно)" +#: src/gns/gnunet-dns2gns.c:784 +#, fuzzy +msgid "UDP port to listen on for inbound DNS requests; default: 2853" +msgstr "" +"УДП прикључник на коме ће ослушкивати за долазним ДНС захтевима; основно: 53" -#: src/gns/gnunet-dns2gns.c:795 +#: src/gns/gnunet-dns2gns.c:801 msgid "GNUnet DNS-to-GNS proxy (a DNS server)" msgstr "Посредник ДНС-до-ГНС ГНУнет-а (ДНС сервер)" -#: src/gns/gnunet-gns.c:227 -#, c-format -msgid "Please specify name to lookup!\n" -msgstr "Наведите назив за тражење!\n" +#: src/gns/gnunet-gns-benchmark.c:582 +#, fuzzy +msgid "how long to wait between queries" +msgstr "време за чекање између прорачуна" -#: src/gns/gnunet-gns.c:308 -#, c-format -msgid "Ego for `%s' not found, cannot perform lookup.\n" -msgstr "Нисам нашао его за „%s“, не могу да обавим претрагу.\n" +#: src/gns/gnunet-gns-benchmark.c:588 +msgid "how long to wait for an answer" +msgstr "" -#: src/gns/gnunet-gns.c:347 src/gns/gnunet-gns-helper-service-w32.c:798 -#, c-format -msgid "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-gns-import.sh?\n" -msgstr "Нисам нашао его за „gns-master“, не могу да обавим претрагу. Да ли сте покренули „gnunet-gns-import.sh“?\n" +#: src/gns/gnunet-gns-benchmark.c:593 +msgid "look for GNS2DNS records instead of ANY" +msgstr "" -#: src/gns/gnunet-gns.c:386 src/gns/gnunet-gns-helper-service-w32.c:828 +#: src/gns/gnunet-gns.c:257 +#, fuzzy, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "„%s“ није исправна ИП адреса.\n" + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 #, c-format -msgid "Failed to connect to GNS\n" -msgstr "Нисам успео да се повежем са ГНС-ом\n" +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "Нисам успео да претворим ДНС ИДНА „%s“ у УТФ-8: %s\n" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" -#: src/gns/gnunet-gns.c:399 +#: src/gns/gnunet-gns.c:305 #, c-format -msgid "Public key `%s' is not well-formed\n" -msgstr "Јавни кључ „%s“ није добро оформљен\n" +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" -#: src/gns/gnunet-gns.c:449 +#: src/gns/gnunet-gns.c:340 msgid "Lookup a record for the given name" msgstr "Претражује запис за датим називом" -#: src/gns/gnunet-gns.c:452 +#: src/gns/gnunet-gns.c:346 msgid "Specify the type of the record to lookup" msgstr "Наводи врсту записа за претраживање" -#: src/gns/gnunet-gns.c:455 -msgid "Specify timeout for the lookup" +#: src/gns/gnunet-gns.c:352 +#, fuzzy +msgid "Specify a timeout for the lookup" msgstr "Наводи време истека за претраживање" -#: src/gns/gnunet-gns.c:458 +#: src/gns/gnunet-gns.c:356 msgid "No unneeded output" msgstr "Нема непотребног излаза" -#: src/gns/gnunet-gns.c:461 -msgid "Specify the public key of the zone to lookup the record in" -msgstr "Наводи јавни кључ зоне у којој ће се тражити запис" - -#: src/gns/gnunet-gns.c:464 -msgid "Specify the name of the ego of the zone to lookup the record in" -msgstr "Наводи назив егоа зоне у којој ће се тражити запис" +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" -#: src/gns/gnunet-gns.c:478 +#: src/gns/gnunet-gns.c:375 msgid "GNUnet GNS resolver tool" msgstr "Алат ГНУнет ГНС решавача" -#: src/gns/gnunet-gns-helper-service-w32.c:768 -#, c-format -msgid "Ego for `gns-short' not found. This is not really fatal, but i'll pretend that it is and refuse to perform a lookup. Did you run gnunet-gns-import.sh?\n" -msgstr "Нисам нашао „gns-short“. То и није баш кобно, али ћу се ја претварати да јесте и одбићу да обавим претраживање. Да ли сте покренули „gnunet-gns-import.sh“?\n" - -#: src/gns/gnunet-gns-helper-service-w32.c:838 -#, c-format -msgid "Failed to connect to identity service\n" -msgstr "Нисам успео да се повежем са услугом идентитета\n" - -#: src/gns/gnunet-gns-import.c:479 +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "Овај програм ће увести неке ГНС ауторитете у ваш ГНС смештај назива." -#: src/gns/gnunet-gns-proxy.c:105 src/hostlist/hostlist-client.c:469 -#: src/hostlist/hostlist-client.c:683 src/hostlist/hostlist-client.c:689 -#: src/hostlist/hostlist-client.c:741 src/hostlist/hostlist-client.c:750 -#: src/hostlist/hostlist-client.c:871 src/hostlist/hostlist-client.c:963 -#: src/hostlist/hostlist-client.c:968 -#: src/transport/plugin_transport_http_client.c:1062 -#: src/transport/plugin_transport_http_client.c:1077 +#: src/gns/gnunet-gns-proxy.c:116 +#: src/hostlist/gnunet-daemon-hostlist_client.c:544 +#: src/hostlist/gnunet-daemon-hostlist_client.c:772 +#: src/hostlist/gnunet-daemon-hostlist_client.c:781 +#: src/hostlist/gnunet-daemon-hostlist_client.c:836 +#: src/hostlist/gnunet-daemon-hostlist_client.c:848 +#: src/hostlist/gnunet-daemon-hostlist_client.c:964 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1066 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1074 +#: src/transport/plugin_transport_http_client.c:600 +#: src/transport/plugin_transport_http_client.c:618 #, c-format msgid "%s failed at %s:%d: `%s'\n" msgstr "„%s“ није успело на %s:%d: „%s“\n" -#: src/gns/gnunet-gns-proxy.c:833 -#, c-format -msgid "Unsupported CURL SSL backend %d\n" +#: src/gns/gnunet-gns-proxy.c:979 +#, fuzzy, c-format +msgid "Unsupported CURL TLS backend %d\n" msgstr "Неподржан CURL SSL позадинац %d\n" -#: src/gns/gnunet-gns-proxy.c:856 +#: src/gns/gnunet-gns-proxy.c:1004 #, c-format msgid "Failed to fetch CN from cert: %s\n" msgstr "Нисам успео да довучем ЦН из уверења: %s\n" -#: src/gns/gnunet-gns-proxy.c:879 +#: src/gns/gnunet-gns-proxy.c:1025 #, c-format msgid "Failed to initialize DANE: %s\n" msgstr "Нисам успео да покренем ДАНЕ: %s\n" -#: src/gns/gnunet-gns-proxy.c:892 +#: src/gns/gnunet-gns-proxy.c:1040 #, c-format msgid "Failed to parse DANE record: %s\n" msgstr "Нисам успео да обрадим ДАНЕ запис: %s\n" -#: src/gns/gnunet-gns-proxy.c:907 +#: src/gns/gnunet-gns-proxy.c:1056 #, c-format msgid "Failed to verify TLS connection using DANE: %s\n" msgstr "Нисам успео да потврдим ТЛС везу користећи ДАНЕ: %s\n" -#: src/gns/gnunet-gns-proxy.c:917 +#: src/gns/gnunet-gns-proxy.c:1067 #, c-format msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n" msgstr "Неуспела ДАНЕ провера није успела са кодом стања ГнуТЛС провере: %u\n" -#: src/gns/gnunet-gns-proxy.c:941 -#, c-format -msgid "SSL certificate subject name (%s) does not match `%s'\n" +#: src/gns/gnunet-gns-proxy.c:1092 +#, fuzzy, c-format +msgid "TLS certificate subject name (%s) does not match `%s': %d\n" msgstr "Назив субјекта ССЛ уверења (%s) не одговара „%s“\n" -#: src/gns/gnunet-gns-proxy.c:1086 +#: src/gns/gnunet-gns-proxy.c:1223 #, c-format msgid "Cookie domain `%s' supplied by server is invalid\n" msgstr "Домен колачића „%s“ које је доставио сервер је неисправан\n" -#: src/gns/gnunet-gns-proxy.c:1602 +#: src/gns/gnunet-gns-proxy.c:2133 #, c-format msgid "Unsupported HTTP method `%s'\n" msgstr "Неподржан ХТТП метод „%s“\n" -#: src/gns/gnunet-gns-proxy.c:1973 +#: src/gns/gnunet-gns-proxy.c:2657 #, c-format msgid "Unable to import private key from file `%s'\n" msgstr "Не могу да увезем приватни кључ из датотеке „%s“\n" -#: src/gns/gnunet-gns-proxy.c:2003 -#, c-format -msgid "Unable to import certificate %s\n" +#: src/gns/gnunet-gns-proxy.c:2689 +#, fuzzy, c-format +msgid "Unable to import certificate from `%s'\n" msgstr "Не могу да увезем уверење „%s“\n" -#: src/gns/gnunet-gns-proxy.c:2177 +#: src/gns/gnunet-gns-proxy.c:2898 #, c-format msgid "Failed to start HTTPS server for `%s'\n" msgstr "Нисам успео да покренем ХТТПС сервер за „%s“\n" -#: src/gns/gnunet-gns-proxy.c:2196 +#: src/gns/gnunet-gns-proxy.c:2922 src/rest/gnunet-rest-server.c:917 msgid "Failed to pass client to MHD\n" msgstr "Нисам успео да проследим клијента МХД-у\n" -#: src/gns/gnunet-gns-proxy.c:2504 +#: src/gns/gnunet-gns-proxy.c:3271 #, c-format msgid "Unsupported socks version %d\n" msgstr "Неподржано издање прикључнице %d\n" -#: src/gns/gnunet-gns-proxy.c:2533 +#: src/gns/gnunet-gns-proxy.c:3303 #, c-format msgid "Unsupported socks command %d\n" msgstr "Неподржана наредба прикључнице %d\n" -#: src/gns/gnunet-gns-proxy.c:2551 src/gns/gnunet-gns-proxy.c:2580 -msgid "SSL connection to plain IPv4 address requested\n" -msgstr "ССЛ веза за обичну ИПв4 адресу је захтевана\n" - -#: src/gns/gnunet-gns-proxy.c:2631 +#: src/gns/gnunet-gns-proxy.c:3389 #, c-format msgid "Unsupported socks address type %d\n" msgstr "Неподржана врста адресе прикључнице %d\n" -#: src/gns/gnunet-gns-proxy.c:2970 -msgid "No ego configured for `shorten-zone`\n" -msgstr "Его није подешен за „shorten-zone“\n" - -#: src/gns/gnunet-gns-proxy.c:3010 -#, c-format -msgid "No ego configured for `%s`\n" -msgstr "Није подешен его за `%s`\n" - -#: src/gns/gnunet-gns-proxy.c:3072 -#, c-format -msgid "Failed to load SSL/TLS key and certificate from `%s'\n" +#: src/gns/gnunet-gns-proxy.c:3730 +#, fuzzy, c-format +msgid "Failed to load X.509 key and certificate from `%s'\n" msgstr "Нисам успео да учитам ССЛ/ТЛС кључ и уверење из „%s“\n" -#: src/gns/gnunet-gns-proxy.c:3113 +#: src/gns/gnunet-gns-proxy.c:3864 msgid "listen on specified port (default: 7777)" msgstr "ослушкиван на наведеном прикључнику (основно: 7777)" -#: src/gns/gnunet-gns-proxy.c:3116 +#: src/gns/gnunet-gns-proxy.c:3869 msgid "pem file to use as CA" msgstr "пем датотека за коришћење као издавач уверења" -#: src/gns/gnunet-gns-proxy.c:3135 +#: src/gns/gnunet-gns-proxy.c:3873 +msgid "disable use of IPv6" +msgstr "" + +#: src/gns/gnunet-gns-proxy.c:3899 msgid "GNUnet GNS proxy" msgstr "ГНУнет ГНС посредник" -#: src/gns/gnunet-service-gns.c:862 -msgid "Failed to connect to the namestore!\n" -msgstr "Нисам успео да се повежем са смештајем назива!\n" +#: src/gns/gnunet-service-gns.c:505 +#, fuzzy +msgid "Properly base32-encoded public key required" +msgstr "исправан јавни кључ се захтева" -#: src/gns/gnunet-service-gns.c:870 +#: src/gns/gnunet-service-gns.c:541 msgid "Failed to connect to the namecache!\n" msgstr "Нисам успео да се повежем са оставом назива!\n" -#: src/gns/gnunet-service-gns.c:903 +#: src/gns/gnunet-service-gns.c:560 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 msgid "Could not connect to DHT!\n" msgstr "Не могу да се повежем на ДХТ!\n" -#: src/gns/gnunet-service-gns.c:919 -msgid "valid public key required" -msgstr "исправан јавни кључ се захтева" - -#: src/gns/gnunet-service-gns_interceptor.c:263 +#: src/gns/gnunet-service-gns_interceptor.c:279 msgid "Error converting GNS response to DNS response!\n" msgstr "Грешка претварања ГНС одговора у ДНС одговор!\n" -#: src/gns/gnunet-service-gns_interceptor.c:369 +#: src/gns/gnunet-service-gns_interceptor.c:387 msgid "Failed to connect to the DNS service!\n" msgstr "Нисам успео да се повежем са ДНС услугом!\n" -#: src/gns/gnunet-service-gns_resolver.c:816 +#: src/gns/gnunet-service-gns_resolver.c:706 +#, c-format +msgid "Protocol `%s' unknown, skipping labels.\n" +msgstr "" + +#: src/gns/gnunet-service-gns_resolver.c:718 +#, c-format +msgid "Service `%s' unknown for protocol `%s', trying as number.\n" +msgstr "" + +#: src/gns/gnunet-service-gns_resolver.c:724 +#, c-format +msgid "Service `%s' not a port, skipping service labels.\n" +msgstr "" + +#: src/gns/gnunet-service-gns_resolver.c:938 msgid "Failed to parse DNS response\n" msgstr "Нисам успео да обрадим ДНС одговор\n" -#: src/gns/gnunet-service-gns_resolver.c:958 +#: src/gns/gnunet-service-gns_resolver.c:1129 #, c-format msgid "Skipping record of unsupported type %d\n" msgstr "Прескачем запис неподржане врсте %d\n" -#: src/gns/gnunet-service-gns_resolver.c:1317 +#: src/gns/gnunet-service-gns_resolver.c:1447 +#, fuzzy, c-format +msgid "VPN returned empty result for `%s'\n" +msgstr "АТС је вратио резултате за %u адресе\n" + +#: src/gns/gnunet-service-gns_resolver.c:1910 +#, c-format +msgid "Name `%s' cannot be converted to IDNA." +msgstr "" + +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "ГНС претраживање је резултирало ДНС називом који је предуг („%s“)\n" -#: src/gns/gnunet-service-gns_resolver.c:1817 +#: src/gns/gnunet-service-gns_resolver.c:1966 +#, fuzzy, c-format +msgid "GNS lookup failed (zero records found for `%s')\n" +msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n" + +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n" -#: src/gns/gnunet-service-gns_resolver.c:1841 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "Нисам успео да сместим у оставу ГНС резолуцију: %s\n" -#: src/gns/gnunet-service-gns_resolver.c:2123 +#: src/gns/gnunet-service-gns_resolver.c:2581 +#, fuzzy, c-format +msgid "GNS namecache returned empty result for `%s'\n" +msgstr "АТС је вратио резултате за %u адресе\n" + +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "Зона %s је опозвана, резолуција није успела\n" -#: src/gns/gnunet-service-gns_resolver.c:2272 -#, c-format -msgid "Hostname `%s' is not well-formed, resolution fails\n" -msgstr "Назив домаћина „%s“ није лепо оформљен, резолуција није успела\n" +#: src/gns/plugin_gnsrecord_gns.c:174 +#, fuzzy, c-format +msgid "Unable to parse zone key record `%s'\n" +msgstr "Не могу да обрадим „MX“ запис „%s“\n" -#: src/gns/plugin_gnsrecord_gns.c:151 -#, c-format -msgid "Unable to parse PKEY record `%s'\n" -msgstr "Не могу да обрадим „PKEY“ запис „%s“\n" +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" +msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:180 +#: src/gns/plugin_gnsrecord_gns.c:213 #, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "Не могу да обрадим „GNS2DNS“ запис „%s“\n" -#: src/gns/plugin_gnsrecord_gns.c:201 -#, c-format -msgid "Failed to serialize GNS2DNS record with value `%s'\n" +#: src/gns/plugin_gnsrecord_gns.c:229 +#, fuzzy, c-format +msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "Нисам успео да серијализујем ГНС2ДНС запис са вредношћу „%s“\n" -#: src/gns/plugin_gnsrecord_gns.c:217 +#: src/gns/plugin_gnsrecord_gns.c:253 #, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "Не могу да обрадим ниску ВПН записа „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:293 +#: src/gns/plugin_gnsrecord_gns.c:285 +#, fuzzy, c-format +msgid "Unable to parse BOX record string `%s'\n" +msgstr "Не могу да обрадим ниску ВПН записа „%s“\n" + +#: src/gns/plugin_rest_gns.c:448 +#, fuzzy +msgid "Gns REST API initialized\n" +msgstr "Меш је покренут\n" + +#: src/gnsrecord/plugin_gnsrecord_dns.c:367 #, c-format msgid "Unable to parse IPv4 address `%s'\n" msgstr "Не могу да обрадим ИПв4 адресу „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:314 +#: src/gnsrecord/plugin_gnsrecord_dns.c:385 #, c-format msgid "Failed to serialize NS record with value `%s'\n" msgstr "Нисам успео да серијализујем НС запис са вредношћу „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:336 +#: src/gnsrecord/plugin_gnsrecord_dns.c:406 #, c-format msgid "Failed to serialize CNAME record with value `%s'\n" msgstr "Нисам успео да серијализујем ЦНАЗИВ запис са вредношћу „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:420 +#: src/gnsrecord/plugin_gnsrecord_dns.c:480 #, c-format msgid "Failed to serialize CERT record with %u bytes\n" msgstr "Нисам успео да серијализујем УВЕР запис са %u бајта\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:452 +#: src/gnsrecord/plugin_gnsrecord_dns.c:516 #, c-format msgid "Unable to parse SOA record `%s'\n" msgstr "Не могу да обрадим „SOA“ запис „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:471 +#: src/gnsrecord/plugin_gnsrecord_dns.c:533 #, c-format msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n" -msgstr "Нисам успео да серијализујем СОА запис са називом „%s“ и р-називом „%s“\n" +msgstr "" +"Нисам успео да серијализујем СОА запис са називом „%s“ и р-називом „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:494 +#: src/gnsrecord/plugin_gnsrecord_dns.c:553 #, c-format msgid "Failed to serialize PTR record with value `%s'\n" msgstr "Нисам успео да серијализујем ПТР запис са вредношћу „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:514 +#: src/gnsrecord/plugin_gnsrecord_dns.c:573 #, c-format msgid "Unable to parse MX record `%s'\n" msgstr "Не могу да обрадим „MX“ запис „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:529 +#: src/gnsrecord/plugin_gnsrecord_dns.c:585 #, c-format msgid "Failed to serialize MX record with hostname `%s'\n" msgstr "Нисам успео да серијализујем МИкс запис са називом домаћина „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:549 +#: src/gnsrecord/plugin_gnsrecord_dns.c:608 +#, fuzzy, c-format +msgid "Unable to parse SRV record `%s'\n" +msgstr "Не могу да обрадим „SOA“ запис „%s“\n" + +#: src/gnsrecord/plugin_gnsrecord_dns.c:621 +#, fuzzy, c-format +msgid "Failed to serialize SRV record with target `%s'\n" +msgstr "Нисам успео да серијализујем НС запис са вредношћу „%s“\n" + +#: src/gnsrecord/plugin_gnsrecord_dns.c:640 #, c-format msgid "Unable to parse IPv6 address `%s'\n" msgstr "Не могу да обрадим ИПв6 адресу „%s“\n" -#: src/gnsrecord/plugin_gnsrecord_dns.c:567 +#: src/gnsrecord/plugin_gnsrecord_dns.c:660 +#: src/gnsrecord/plugin_gnsrecord_dns.c:674 #, c-format msgid "Unable to parse TLSA record string `%s'\n" msgstr "Не могу да обрадим ниску ТЛСА записа „%s“\n" -#: src/hello/gnunet-hello.c:123 +#: src/gnsrecord/plugin_gnsrecord_dns.c:693 +#, fuzzy, c-format +msgid "Unable to parse CAA record string `%s'\n" +msgstr "Не могу да обрадим ниску ТЛСА записа „%s“\n" + +#: src/hello/gnunet-hello.c:122 msgid "Call with name of HELLO file to modify.\n" msgstr "Позив са називом датотеке „HELLO“ за мењање.\n" @@ -4103,1823 +4413,2205 @@ msgstr "Позив са називом датотеке „HELLO“ за мењ msgid "Error accessing file `%s': %s\n" msgstr "Грешка приступа датотеци „%s“: %s\n" -#: src/hello/gnunet-hello.c:137 +#: src/hello/gnunet-hello.c:136 #, c-format msgid "File `%s' is too big to be a HELLO\n" msgstr "Датотека „%s“ је превелика да би била „HELLO“\n" -#: src/hello/gnunet-hello.c:144 +#: src/hello/gnunet-hello.c:141 #, c-format msgid "File `%s' is too small to be a HELLO\n" msgstr "Датотека „%s“ је премала да би била „HELLO“\n" -#: src/hello/gnunet-hello.c:154 src/hello/gnunet-hello.c:183 +#: src/hello/gnunet-hello.c:150 src/hello/gnunet-hello.c:189 #, c-format msgid "Error opening file `%s': %s\n" msgstr "Грешка отварања датотеке „%s“: %s\n" -#: src/hello/gnunet-hello.c:170 +#: src/hello/gnunet-hello.c:165 #, c-format msgid "Did not find well-formed HELLO in file `%s'\n" msgstr "Нисам нашао лепо формирано „HELLO“ у датотеци „%s“\n" -#: src/hello/gnunet-hello.c:195 +#: src/hello/gnunet-hello.c:199 #, c-format msgid "Error writing HELLO to file `%s': %s\n" msgstr "Грешка писања „HELLO“-а у датотеку „%s“: %s\n" -#: src/hello/gnunet-hello.c:203 -#, c-format -msgid "Modified %u addresses \n" +#: src/hello/gnunet-hello.c:208 +#, fuzzy, c-format +msgid "Modified %u addresses, wrote %u bytes\n" msgstr "Измењених адреса — %u \n" -#: src/hello/hello.c:944 +#: src/hello/hello.c:1111 msgid "Failed to parse HELLO message: missing expiration time\n" msgstr "Нисам успео да обрадим „HELLO“ поруку: недостаје време истека\n" -#: src/hello/hello.c:953 +#: src/hello/hello.c:1121 msgid "Failed to parse HELLO message: invalid expiration time\n" msgstr "Нисам успео да обрадим „HELLO“ поруку: неисправно време истека\n" -#: src/hello/hello.c:963 +#: src/hello/hello.c:1131 msgid "Failed to parse HELLO message: malformed\n" msgstr "Нисам успео да обрадим „HELLO“ поруку: лоша\n" -#: src/hello/hello.c:973 +#: src/hello/hello.c:1143 msgid "Failed to parse HELLO message: missing transport plugin\n" msgstr "Нисам успео да обрадим „HELLO“ поруку: недостаје прикључак преноса\n" -#: src/hello/hello.c:990 -#, c-format -msgid "Plugin `%s' not found\n" +#: src/hello/hello.c:1161 +#, fuzzy, c-format +msgid "Plugin `%s' not found, skipping address\n" msgstr "Нисам нашао прикључак „%s“\n" -#: src/hello/hello.c:999 +#: src/hello/hello.c:1169 #, c-format msgid "Plugin `%s' does not support URIs yet\n" msgstr "Прикључак „%s“ још не подржава УРИ-је\n" -#: src/hello/hello.c:1018 +#: src/hello/hello.c:1184 #, c-format msgid "Failed to parse `%s' as an address for plugin `%s'\n" msgstr "Нисам успео да обрадим „%s“ као адресу за прикључак „%s“\n" -#: src/hostlist/gnunet-daemon-hostlist.c:259 -msgid "None of the functions for the hostlist daemon were enabled. I have no reason to run!\n" -msgstr "Ниједна од функција за демона списка домаћина није укључена. Немам разлога да радим било шта!\n" +#: src/hostlist/gnunet-daemon-hostlist.c:306 +msgid "" +"None of the functions for the hostlist daemon were enabled. I have no " +"reason to run!\n" +msgstr "" +"Ниједна од функција за демона списка домаћина није укључена. Немам разлога " +"да радим било шта!\n" -#: src/hostlist/gnunet-daemon-hostlist.c:308 +#: src/hostlist/gnunet-daemon-hostlist.c:364 msgid "advertise our hostlist to other peers" msgstr "рекламира наш списак домаћина другим парњацима" -#: src/hostlist/gnunet-daemon-hostlist.c:313 -msgid "bootstrap using hostlists (it is highly recommended that you always use this option)" -msgstr "почетно подизање помоћу спискова домаћина (врло се препоручује да увек користите ову опцију)" +#: src/hostlist/gnunet-daemon-hostlist.c:369 +msgid "" +"bootstrap using hostlists (it is highly recommended that you always use this " +"option)" +msgstr "" +"почетно подизање помоћу спискова домаћина (врло се препоручује да увек " +"користите ову опцију)" -#: src/hostlist/gnunet-daemon-hostlist.c:316 +#: src/hostlist/gnunet-daemon-hostlist.c:374 msgid "enable learning about hostlist servers from other peers" msgstr "укључује учење о серверима списка домаћина са других парњака" -#: src/hostlist/gnunet-daemon-hostlist.c:320 +#: src/hostlist/gnunet-daemon-hostlist.c:378 msgid "provide a hostlist server" msgstr "обезбеђује сервер списка домаћина" -#: src/hostlist/gnunet-daemon-hostlist.c:335 +#: src/hostlist/gnunet-daemon-hostlist.c:393 msgid "GNUnet hostlist server and client" msgstr "Сервер и клијент списка домаћина ГНУнет-а" -#: src/hostlist/hostlist-client.c:288 +#: src/hostlist/gnunet-daemon-hostlist_client.c:343 msgid "# bytes downloaded from hostlist servers" msgstr "# бајтови су преузети са сервера списка домаћина" -#: src/hostlist/hostlist-client.c:309 src/hostlist/hostlist-client.c:339 +#: src/hostlist/gnunet-daemon-hostlist_client.c:365 +#: src/hostlist/gnunet-daemon-hostlist_client.c:402 msgid "# invalid HELLOs downloaded from hostlist servers" msgstr "# неисправни „HELLO“-и су преузети са сервера списка домаћина" -#: src/hostlist/hostlist-client.c:312 src/hostlist/hostlist-client.c:342 +#: src/hostlist/gnunet-daemon-hostlist_client.c:369 +#: src/hostlist/gnunet-daemon-hostlist_client.c:406 #, c-format msgid "Invalid `%s' message received from hostlist at `%s'\n" msgstr "Неисправна „%s“ порука је примљена са списка домаћина на „%s“\n" -#: src/hostlist/hostlist-client.c:330 +#: src/hostlist/gnunet-daemon-hostlist_client.c:388 msgid "# valid HELLOs downloaded from hostlist servers" msgstr "# исправни „HELLO“-и су преузети са сервера списка домаћина" -#: src/hostlist/hostlist-client.c:592 src/hostlist/hostlist-client.c:1333 +#: src/hostlist/gnunet-daemon-hostlist_client.c:677 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1460 msgid "# advertised hostlist URIs" msgstr "# рекламиране путање списка домаћина" -#: src/hostlist/hostlist-client.c:622 +#: src/hostlist/gnunet-daemon-hostlist_client.c:709 #, c-format msgid "# advertised URI `%s' downloaded" msgstr "# рекламирана путања „%s“ је преузета" -#: src/hostlist/hostlist-client.c:664 +#: src/hostlist/gnunet-daemon-hostlist_client.c:752 #, c-format -msgid "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI gets dismissed.\n" -msgstr "Рекламирани списак домаћина са путањом „%s“ се не може преузети. Рекламирана путања је одбачена.\n" +msgid "" +"Advertised hostlist with URI `%s' could not be downloaded. Advertised URI " +"gets dismissed.\n" +msgstr "" +"Рекламирани списак домаћина са путањом „%s“ се не може преузети. Рекламирана " +"путања је одбачена.\n" -#: src/hostlist/hostlist-client.c:802 +#: src/hostlist/gnunet-daemon-hostlist_client.c:893 #, c-format msgid "Timeout trying to download hostlist from `%s'\n" msgstr "Време је истекло у покушају преузимања списка домаћина са „%s“\n" -#: src/hostlist/hostlist-client.c:816 +#: src/hostlist/gnunet-daemon-hostlist_client.c:908 #, c-format msgid "Download limit of %u bytes exceeded, stopping download\n" -msgstr "Ограничење преузимања од %u бајта је премашено, заустављам преузимање\n" +msgstr "" +"Ограничење преузимања од %u бајта је премашено, заустављам преузимање\n" -#: src/hostlist/hostlist-client.c:836 +#: src/hostlist/gnunet-daemon-hostlist_client.c:928 #, c-format msgid "Download of hostlist from `%s' failed: `%s'\n" msgstr "Преузимање списка доамаћина са „%s“ није успело: „%s“\n" -#: src/hostlist/hostlist-client.c:842 +#: src/hostlist/gnunet-daemon-hostlist_client.c:934 #, c-format msgid "Download of hostlist `%s' completed.\n" msgstr "Преузимање списка домаћина „%s“ је завршено.\n" -#: src/hostlist/hostlist-client.c:850 +#: src/hostlist/gnunet-daemon-hostlist_client.c:942 #, c-format msgid "Adding successfully tested hostlist `%s' datastore.\n" msgstr "Додаје успешно тестирани смештај података „%s“ списка домаћина.\n" -#: src/hostlist/hostlist-client.c:903 +#: src/hostlist/gnunet-daemon-hostlist_client.c:998 #, c-format msgid "Bootstrapping using hostlist at `%s'.\n" msgstr "Вршим почетно подизање помоћу списка домаћина на „%s“.\n" -#: src/hostlist/hostlist-client.c:911 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1007 msgid "# hostlist downloads initiated" msgstr "# преузимања списка домаћина су започета" -#: src/hostlist/hostlist-client.c:1040 src/hostlist/hostlist-client.c:1506 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1144 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1728 msgid "# milliseconds between hostlist downloads" msgstr "# милисекунди између преузимања списка домаћина" -#: src/hostlist/hostlist-client.c:1049 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1154 #, c-format msgid "Have %u/%u connections. Will consider downloading hostlist in %s\n" msgstr "Имам %u/%u везе. Размотрићу преузимање списка домаћина за %s\n" -#: src/hostlist/hostlist-client.c:1109 src/hostlist/hostlist-client.c:1125 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1212 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1233 msgid "# active connections" msgstr "# активних веза" -#: src/hostlist/hostlist-client.c:1280 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1396 #, c-format msgid "Loading saved hostlist entries from file `%s' \n" msgstr "Учитавам сачуване уносе списка домаћина из датотеке „%s“ \n" -#: src/hostlist/hostlist-client.c:1285 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1401 #, c-format msgid "Hostlist file `%s' does not exist\n" msgstr "Датотека списка домаћина „%s“ не постоји\n" -#: src/hostlist/hostlist-client.c:1296 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1412 #, c-format msgid "Could not open file `%s' for reading to load hostlists: %s\n" -msgstr "Не могу да отворим датотеку „%s“ за читање да утоварим спискове домаћина: %s\n" +msgstr "" +"Не могу да отворим датотеку „%s“ за читање да утоварим спискове домаћина: " +"%s\n" -#: src/hostlist/hostlist-client.c:1329 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1453 #, c-format msgid "%u hostlist URIs loaded from file\n" msgstr "УРИ-и %u списка домаћина су учитани из датотеке\n" -#: src/hostlist/hostlist-client.c:1331 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1456 msgid "# hostlist URIs read from file" msgstr "# УРИ-и списка домаћина су учитани из датотеке" -#: src/hostlist/hostlist-client.c:1376 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1507 #, c-format msgid "Could not open file `%s' for writing to save hostlists: %s\n" -msgstr "Не могу да отворим датотеку „%s“ за писање да сачувам спискове домаћина: %s\n" +msgstr "" +"Не могу да отворим датотеку „%s“ за писање да сачувам спискове домаћина: %s\n" -#: src/hostlist/hostlist-client.c:1381 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1514 #, c-format msgid "Writing %u hostlist URIs to `%s'\n" msgstr "Уписујем УРИ-је %u списка домаћина у „%s“\n" -#: src/hostlist/hostlist-client.c:1405 src/hostlist/hostlist-client.c:1422 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1547 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1566 #, c-format msgid "Error writing hostlist URIs to file `%s'\n" msgstr "Грешка писања УРИ-а списка домаћина у датотеку „%s“\n" -#: src/hostlist/hostlist-client.c:1417 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1560 msgid "# hostlist URIs written to file" msgstr "# УРИ-и списка домаћина су записани у датотеку" -#: src/hostlist/hostlist-client.c:1471 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1657 +#: src/transport/plugin_transport_http_client.c:2300 +#, c-format +msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" +msgstr "" + +#: src/hostlist/gnunet-daemon-hostlist_client.c:1686 msgid "Learning is enabled on this peer\n" msgstr "Учење је укључено на овом парњаку\n" -#: src/hostlist/hostlist-client.c:1483 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1699 msgid "Learning is not enabled on this peer\n" msgstr "Учење није укључено на овом парњаку\n" -#: src/hostlist/hostlist-client.c:1495 +#: src/hostlist/gnunet-daemon-hostlist_client.c:1713 #, c-format -msgid "Since learning is not enabled on this peer, hostlist file `%s' was removed\n" -msgstr "Како учење није укључено на овом парњаку, датотека списка домаћина „%s“ је уклоњена\n" - -#: src/hostlist/hostlist-client.c:1499 -#, c-format -msgid "Hostlist file `%s' could not be removed\n" -msgstr "Датотека списка домаћина „%s“ не може бити уклоњена\n" +msgid "" +"Since learning is not enabled on this peer, hostlist file `%s' was removed\n" +msgstr "" +"Како учење није укључено на овом парњаку, датотека списка домаћина „%s“ је " +"уклоњена\n" -#: src/hostlist/hostlist-server.c:137 +#: src/hostlist/gnunet-daemon-hostlist_server.c:173 msgid "bytes in hostlist" msgstr "бајтова у списку домаћина" -#: src/hostlist/hostlist-server.c:161 +#: src/hostlist/gnunet-daemon-hostlist_server.c:199 msgid "expired addresses encountered" msgstr "наиђох на истекле адресе" -#: src/hostlist/hostlist-server.c:189 src/hostlist/hostlist-server.c:425 -#: src/peerinfo-tool/gnunet-peerinfo.c:350 -#: src/peerinfo-tool/gnunet-peerinfo.c:419 -#: src/peerinfo-tool/gnunet-peerinfo.c:490 -#: src/topology/gnunet-daemon-topology.c:925 +#: src/hostlist/gnunet-daemon-hostlist_server.c:236 +#: src/hostlist/gnunet-daemon-hostlist_server.c:527 +#: src/peerinfo-tool/gnunet-peerinfo.c:379 +#: src/peerinfo-tool/gnunet-peerinfo.c:515 +#: src/topology/gnunet-daemon-topology.c:799 #, c-format msgid "Error in communication with PEERINFO service: %s\n" msgstr "Грешка у комуникацији са услугом ПОДАЦИ_ПАРЊАКА: %s\n" -#: src/hostlist/hostlist-server.c:210 +#: src/hostlist/gnunet-daemon-hostlist_server.c:257 msgid "HELLOs without addresses encountered (ignored)" msgstr "наиђох на „HELLO“-е без адреса (занемарено)" -#: src/hostlist/hostlist-server.c:224 +#: src/hostlist/gnunet-daemon-hostlist_server.c:275 msgid "bytes not included in hostlist (size limit)" msgstr "бајтови нису укључени на списак домаћина (ограничење величине)" -#: src/hostlist/hostlist-server.c:268 +#: src/hostlist/gnunet-daemon-hostlist_server.c:377 #, c-format msgid "Refusing `%s' request to hostlist server\n" msgstr "Одбијам „%s“ захтев за сервер списка домаћина\n" -#: src/hostlist/hostlist-server.c:271 +#: src/hostlist/gnunet-daemon-hostlist_server.c:381 msgid "hostlist requests refused (not HTTP GET)" msgstr "захтеви списка домаћина су одбијени (нису „HTTP GET“)" -#: src/hostlist/hostlist-server.c:284 +#: src/hostlist/gnunet-daemon-hostlist_server.c:394 #, c-format msgid "Refusing `%s' request with %llu bytes of upload data\n" msgstr "Одбијам „%s“ захтев са %llu бајта података утовара\n" -#: src/hostlist/hostlist-server.c:288 +#: src/hostlist/gnunet-daemon-hostlist_server.c:399 msgid "hostlist requests refused (upload data)" msgstr "захтеви списка домаћина су одбијени (подаци утовара)" -#: src/hostlist/hostlist-server.c:296 +#: src/hostlist/gnunet-daemon-hostlist_server.c:409 msgid "Could not handle hostlist request since I do not have a response yet\n" msgstr "Не могу да радим са захтевом списка домаћина јер још немам одговор\n" -#: src/hostlist/hostlist-server.c:299 +#: src/hostlist/gnunet-daemon-hostlist_server.c:412 msgid "hostlist requests refused (not ready)" msgstr "захтеви списка домаћина су одбијени (нису спремни)" -#: src/hostlist/hostlist-server.c:303 +#: src/hostlist/gnunet-daemon-hostlist_server.c:418 msgid "Received request for our hostlist\n" msgstr "Примих захтев за наш списак домаћина\n" -#: src/hostlist/hostlist-server.c:304 +#: src/hostlist/gnunet-daemon-hostlist_server.c:420 msgid "hostlist requests processed" msgstr "захтеви списка домаћина су обрађени" -#: src/hostlist/hostlist-server.c:346 +#: src/hostlist/gnunet-daemon-hostlist_server.c:461 msgid "# hostlist advertisements send" msgstr "# рекламе списка домаћина су послате" -#: src/hostlist/hostlist-server.c:390 -msgid "Advertisement message could not be queued by core\n" -msgstr "Поруку оглашавања језгро не може да стави у ред\n" - -#: src/hostlist/hostlist-server.c:557 src/peerinfo-tool/gnunet-peerinfo.c:639 -#: src/transport/gnunet-service-transport.c:1114 +#: src/hostlist/gnunet-daemon-hostlist_server.c:674 +#: src/transport/gnunet-service-transport.c:2661 msgid "Could not access PEERINFO service. Exiting.\n" msgstr "Не могу да приступим услузи ИНФО_ПАРЊАКА. Излазим.\n" -#: src/hostlist/hostlist-server.c:576 +#: src/hostlist/gnunet-daemon-hostlist_server.c:685 +#, c-format +msgid "Invalid port number %llu. Exiting.\n" +msgstr "Неисправан број прикључника %llu. Излазим.\n" + +#: src/hostlist/gnunet-daemon-hostlist_server.c:697 #, c-format msgid "Hostlist service starts on %s:%llu\n" msgstr "Услуга списка домаћина почиње на %s:%llu\n" -#: src/hostlist/hostlist-server.c:590 +#: src/hostlist/gnunet-daemon-hostlist_server.c:714 #, c-format msgid "Address to obtain hostlist: `%s'\n" msgstr "Адреса за добијање списка домаћина: „%s“\n" -#: src/hostlist/hostlist-server.c:630 -#, c-format -msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" +#: src/hostlist/gnunet-daemon-hostlist_server.c:729 +#, fuzzy +msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n" +msgstr "„%s“ није исправна ИП адреса! Занемарујем „BINDTOIP“.\n" + +#: src/hostlist/gnunet-daemon-hostlist_server.c:743 +#, fuzzy +msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n" msgstr "„%s“ није исправна ИП адреса! Занемарујем „BINDTOIP“.\n" -#: src/hostlist/hostlist-server.c:673 +#: src/hostlist/gnunet-daemon-hostlist_server.c:765 +#, fuzzy, c-format +msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n" +msgstr "„%s“ није исправна ИП адреса! Занемарујем „BINDTOIP“.\n" + +#: src/hostlist/gnunet-daemon-hostlist_server.c:786 +#, fuzzy, c-format +msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n" +msgstr "„%s“ није исправна ИП адреса! Занемарујем „BINDTOIP“.\n" + +#: src/hostlist/gnunet-daemon-hostlist_server.c:829 #, c-format msgid "Could not start hostlist HTTP server on port %u\n" msgstr "Не могу да покренем ХТТП сервер списка домаћина на прикључнику %u\n" -#: src/identity/gnunet-identity.c:165 +#: src/identity/gnunet-identity.c:214 #, c-format msgid "Failed to create ego: %s\n" msgstr "Нисам успео да направим его: %s\n" -#: src/identity/gnunet-identity.c:184 +#: src/identity/gnunet-identity.c:255 #, c-format msgid "Failed to set default ego: %s\n" msgstr "Нисам успео да поставим основни его: %s\n" -#: src/identity/gnunet-identity.c:327 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "ствара НАЗИВ ега" -#: src/identity/gnunet-identity.c:330 +#: src/identity/gnunet-identity.c:467 msgid "delete ego NAME " msgstr "брише НАЗИВ ега " +#: src/identity/gnunet-identity.c:473 +msgid "" +"set the private key for the identity to PRIVATE_KEY (use together with -C)" +msgstr "" + +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + # # File: util/dialtest.c++, line: 134 -#: src/identity/gnunet-identity.c:333 +#: src/identity/gnunet-identity.c:482 msgid "display all egos" msgstr "приказује све егое" -#: src/identity/gnunet-identity.c:336 -msgid "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)" -msgstr "поставља основни идентитет на ЕГО за подсистем ПОДСИСТЕМ (користите заједно са -s)" +#: src/identity/gnunet-identity.c:486 +#, fuzzy +msgid "reduce output" +msgstr "опширан излаз" + +#: src/identity/gnunet-identity.c:493 +#, fuzzy +msgid "" +"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" +"s) or restrict results to NAME (use together with -d)" +msgstr "" +"поставља основни идентитет на ЕГО за подсистем ПОДСИСТЕМ (користите заједно " +"са -s)" -#: src/identity/gnunet-identity.c:339 +#: src/identity/gnunet-identity.c:497 msgid "run in monitor mode egos" msgstr "ради у режиму праћења егоа" -#: src/identity/gnunet-identity.c:342 -msgid "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" -msgstr "поставља основни идентитет на ЕГО за подсистем ПОДСИСТЕМ (користите заједно са -e)" +#: src/identity/gnunet-identity.c:501 +msgid "display private keys as well" +msgstr "" + +#: src/identity/gnunet-identity.c:508 +msgid "" +"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" +msgstr "" +"поставља основни идентитет на ЕГО за подсистем ПОДСИСТЕМ (користите заједно " +"са -e)" -#: src/identity/gnunet-identity.c:351 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "Одржава егое" -#: src/identity/gnunet-service-identity.c:338 +#: src/identity/gnunet-service-identity.c:503 msgid "no default known" msgstr "основнст није позната" -#: src/identity/gnunet-service-identity.c:362 +#: src/identity/gnunet-service-identity.c:528 msgid "default configured, but ego unknown (internal error)" msgstr "основни је подешен, али его није познат (унутрашња грешка)" -#: src/identity/gnunet-service-identity.c:439 -#: src/identity/gnunet-service-identity.c:670 -#: src/identity/gnunet-service-identity.c:778 +#: src/identity/gnunet-service-identity.c:621 +#: src/identity/gnunet-service-identity.c:898 +#: src/identity/gnunet-service-identity.c:1018 #, c-format msgid "Failed to write subsystem default identifier map to `%s'.\n" msgstr "Нисам успео да запишем основну мапу одредника подсистема у „%s“.\n" -#: src/identity/gnunet-service-identity.c:446 +#: src/identity/gnunet-service-identity.c:631 msgid "Unknown ego specified for service (internal error)" msgstr "Непознат его је наведен за услугу (унутрашња грешка)" -#: src/identity/gnunet-service-identity.c:516 +#: src/identity/gnunet-service-identity.c:726 msgid "identifier already in use for another ego" msgstr "одредник се већ користи за други его" -#: src/identity/gnunet-service-identity.c:647 +#: src/identity/gnunet-service-identity.c:874 msgid "target name already exists" msgstr "назив мете већ постоји" -#: src/identity/gnunet-service-identity.c:686 -#: src/identity/gnunet-service-identity.c:795 +#: src/identity/gnunet-service-identity.c:916 +#: src/identity/gnunet-service-identity.c:1035 msgid "no matching ego found" msgstr "нисам нашао одговарајући его" -#: src/identity/gnunet-service-identity.c:829 +#: src/identity/gnunet-service-identity.c:1133 #, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "Нисам успео да обрадим податке егоа у „%s“\n" -#: src/identity/gnunet-service-identity.c:902 +#: src/identity/gnunet-service-identity.c:1191 #, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" -msgstr "Нисам успео да обрадим датотеку подешавања идентитета субсистема „%s“\n" +msgstr "" +"Нисам успео да обрадим датотеку подешавања идентитета субсистема „%s“\n" -#: src/identity/gnunet-service-identity.c:914 +#: src/identity/gnunet-service-identity.c:1200 #, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "Нисам успео да направим директоријум „%s“ за смештајне егое\n" -#: src/mesh/gnunet-mesh.c:357 -#, c-format -msgid "Invalid target `%s'\n" -msgstr "Неисправна мета „%s“\n" - -#: src/mesh/gnunet-mesh.c:607 -#, c-format -msgid "Invalid peer ID `%s'\n" -msgstr "Неисправан ИБ парњака „%s“\n" - -#: src/mesh/gnunet-mesh.c:650 -#, c-format -msgid "Invalid tunnel owner `%s'\n" -msgstr "Неисправан власник тунела „%s“\n" - -#: src/mesh/gnunet-mesh.c:716 -msgid "You must NOT give a TARGETwhen using 'request all' options\n" -msgstr "НЕ можете дати МЕТУ када користите опције „request all“\n" - -#: src/mesh/gnunet-mesh.c:807 -msgid "provide information about a particular connection" -msgstr "обезбеђује податке о нарочитој вези" - -#: src/mesh/gnunet-mesh.c:810 -msgid "activate echo mode" -msgstr "покреће режим ехоа" - -#: src/mesh/gnunet-mesh.c:816 -msgid "port to listen to (default; 0)" -msgstr "прикључник за ослушкивање (основно; 0)" - -#: src/mesh/gnunet-mesh.c:819 src/mesh/gnunet-mesh.c:822 -msgid "provide information about all peers" -msgstr "обезбеђује податке о свим парњацима" - -#: src/mesh/gnunet-mesh.c:825 -msgid "provide information about a particular tunnel" -msgstr "обезбеђује податке о нарочитом тунелу" +#: src/identity/plugin_rest_identity.c:1385 +msgid "Identity REST API initialized\n" +msgstr "" -#: src/mesh/gnunet-mesh.c:828 -msgid "provide information about all tunnels" -msgstr "обезбеђује податке о свим тунелима" +#: src/json/json.c:139 +#, fuzzy, c-format +msgid "Failed to parse JSON in option `%s': %s (%s)\n" +msgstr "Нисам успео да обрадим „HELLO“ у датотеци „%s“: %s\n" -#: src/mesh/gnunet-service-mesh_peer.c:390 -msgid "Wrong CORE service\n" -msgstr "Погрешна ЈЕЗГРЕНА услуга\n" +#: src/my/my.c:196 src/my/my.c:215 +#, fuzzy, c-format +msgid "%s failed at %s:%d with error: %s\n" +msgstr "„%s“ није успело на %s:%d са грешком: %s\n" -#: src/mysql/mysql.c:174 +#: src/mysql/mysql.c:190 #, c-format msgid "Trying to use file `%s' for MySQL configuration.\n" msgstr "Покушавам да користим датотеку „%s“ за МајСКуЛ подешавање.\n" -#: src/mysql/mysql.c:181 +#: src/mysql/mysql.c:198 #, c-format msgid "Could not access file `%s': %s\n" msgstr "Не могу да приступим датотеци „%s“: %s\n" -#: src/namecache/gnunet-namecache.c:109 +#: src/namecache/gnunet-namecache.c:106 #, c-format msgid "No records found for `%s'" msgstr "Нисам нашао записе за „%s“" -#: src/namecache/gnunet-namecache.c:124 src/namestore/gnunet-namestore.c:397 +#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459 #, c-format msgid "\tCorrupt or unsupported record of type %u\n" msgstr "\tОштећен или неподржан запис врсте %u\n" -#: src/namecache/gnunet-namecache.c:185 +#: src/namecache/gnunet-namecache.c:175 #, c-format msgid "You must specify which zone should be accessed\n" msgstr "Морате навести којој зони се треба приступити\n" -#: src/namecache/gnunet-namecache.c:195 src/namestore/gnunet-namestore.c:695 -#, c-format -msgid "Invalid public key for reverse lookup `%s'\n" +#: src/namecache/gnunet-namecache.c:182 +#, fuzzy, c-format +msgid "Invalid public key for zone `%s'\n" msgstr "Неисправан јавни кључ за обратну претрагу „%s“\n" -#: src/namecache/gnunet-namecache.c:203 +#: src/namecache/gnunet-namecache.c:188 #, c-format msgid "You must specify a name\n" msgstr "Морате навести назив\n" -#: src/namecache/gnunet-namecache.c:234 src/namestore/gnunet-namestore.c:931 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "назив записа за додавање/брисање/приказ" -#: src/namecache/gnunet-namecache.c:237 -msgid "spezifies the public key of the zone to look in" +#: src/namecache/gnunet-namecache.c:221 +#, fuzzy +msgid "specifies the public key of the zone to look in" msgstr "наводи јавни кључ зоне за претраживање" -#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:963 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 msgid "GNUnet zone manipulation tool" msgstr "Алат манипуслисања ГНУнет зоном" -#: src/namecache/namecache_api.c:276 +#: src/namecache/namecache_api.c:285 msgid "Namecache failed to cache block" msgstr "Остава назива није успела да смести у оставу блок" -#: src/namecache/plugin_namecache_postgres.c:89 -#: src/namestore/plugin_namestore_postgres.c:96 -msgid "Failed to create indices\n" -msgstr "Нисам успео да направим индексе\n" +#: src/namecache/namecache_api.c:373 +#, fuzzy +msgid "Error communicating with namecache service" +msgstr "Грешка у комуникацији са услугом ПОДАЦИ_ПАРЊАКА: %s\n" + +#: src/namecache/plugin_namecache_flat.c:118 +#: src/namecache/plugin_namecache_flat.c:253 +#: src/namestore/plugin_namestore_flat.c:176 +#: src/namestore/plugin_namestore_flat.c:424 +#: src/peerstore/plugin_peerstore_flat.c:380 +#: src/peerstore/plugin_peerstore_flat.c:542 +#, fuzzy, c-format +msgid "Unable to initialize file: %s.\n" +msgstr "Не могу да покренем СКуЛајт: %s.\n" + +#: src/namecache/plugin_namecache_flat.c:129 +#: src/namestore/plugin_namestore_flat.c:187 +#: src/peerstore/plugin_peerstore_flat.c:395 +#, fuzzy, c-format +msgid "Unable to get filesize: %s.\n" +msgstr "Не могу да покренем СКуЛајт: %s.\n" + +#: src/namecache/plugin_namecache_flat.c:148 +#: src/peerstore/plugin_peerstore_flat.c:407 +#, fuzzy, c-format +msgid "Unable to read file: %s.\n" +msgstr "Нисам успео да прочитам датотеку" + +#: src/namecache/plugin_namecache_flat.c:404 +msgid "flat plugin running\n" +msgstr "" + +#: src/namecache/plugin_namecache_sqlite.c:190 +#: src/namecache/plugin_namecache_sqlite.c:204 +#: src/namestore/plugin_namestore_sqlite.c:226 +#: src/namestore/plugin_namestore_sqlite.c:237 +#, fuzzy, c-format +msgid "Failed to setup database at `%s'\n" +msgstr "Нисам успео да покренем „%s“ на „%s“\n" -#: src/namestore/gnunet-namestore.c:303 +#: src/namestore/gnunet-namestore.c:334 #, c-format msgid "Adding record failed: %s\n" msgstr "Додавање записа није успело: %s\n" -#: src/namestore/gnunet-namestore.c:332 +#: src/namestore/gnunet-namestore.c:362 #, c-format msgid "Deleting record failed, record does not exist%s%s\n" msgstr "Брисање записа није успело, запис не постоји%s%s\n" -#: src/namestore/gnunet-namestore.c:339 +#: src/namestore/gnunet-namestore.c:369 #, c-format msgid "Deleting record failed%s%s\n" msgstr "Брисање записа није успело%s%s\n" -#: src/namestore/gnunet-namestore.c:558 +#: src/namestore/gnunet-namestore.c:656 +#, c-format +msgid "A %s record exists already under `%s', no other records can be added.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:680 +#, c-format +msgid "" +"A SOA record exists already under `%s', cannot add a second SOA to the same " +"zone.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:696 +#, c-format +msgid "Records already exist under `%s', cannot add `%s' record.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:726 +#, c-format +msgid "" +"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:846 +#, fuzzy, c-format +msgid "There are no records under label `%s' that could be deleted.\n" +msgstr "Нема позива који би могао бити отказан управо сада.\n" + +#: src/namestore/gnunet-namestore.c:889 +#, c-format +msgid "" +"There are no records under label `%s' that match the request for deletion.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:970 +#, fuzzy, c-format +msgid "Failed to replace records: %s\n" +msgstr "Нисам успео да обрадим ДАНЕ запис: %s\n" + +#: src/namestore/gnunet-namestore.c:993 #, c-format msgid "No options given\n" msgstr "Нису дате опције\n" -#: src/namestore/gnunet-namestore.c:569 -#: src/namestore/gnunet-namestore-fcfsd.c:970 -msgid "Failed to connect to namestore\n" -msgstr "Нисам успео да се повежем са смештајем назива\n" - -#: src/namestore/gnunet-namestore.c:577 src/namestore/gnunet-namestore.c:586 -#: src/namestore/gnunet-namestore.c:603 src/namestore/gnunet-namestore.c:625 -#: src/namestore/gnunet-namestore.c:665 +#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 +#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 +#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 +#: src/namestore/gnunet-namestore.c:1228 #, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "Недостаје опција „%s“ за радњу „%s“\n" -#: src/namestore/gnunet-namestore.c:578 src/namestore/gnunet-namestore.c:587 -#: src/namestore/gnunet-namestore.c:604 src/namestore/gnunet-namestore.c:626 +#: src/namestore/gnunet-namestore.c:1016 +msgid "replace" +msgstr "" + +#: src/namestore/gnunet-namestore.c:1045 +#, c-format +msgid "Invalid nick `%s'\n" +msgstr "Неисправан надимак „%s“\n" + +#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 +#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "додај" -#: src/namestore/gnunet-namestore.c:595 +#: src/namestore/gnunet-namestore.c:1086 #, c-format msgid "Unsupported type `%s'\n" msgstr "Неподржана врста „%s“\n" -#: src/namestore/gnunet-namestore.c:615 +#: src/namestore/gnunet-namestore.c:1096 +#, c-format +msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'" +msgstr "" + +#: src/namestore/gnunet-namestore.c:1116 #, c-format msgid "Value `%s' invalid for record type `%s'\n" msgstr "Вредност „%s“ је неисправна за врсту записа „%s“\n" -#: src/namestore/gnunet-namestore.c:651 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, c-format msgid "Invalid time format `%s'\n" msgstr "Неисправан формат времена „%s“\n" -#: src/namestore/gnunet-namestore.c:666 +#: src/namestore/gnunet-namestore.c:1155 msgid "del" msgstr "обриши" -#: src/namestore/gnunet-namestore.c:715 -#: src/peerinfo-tool/gnunet-peerinfo.c:723 +#: src/namestore/gnunet-namestore.c:1197 #, c-format -msgid "Invalid URI `%s'\n" -msgstr "Неисправан УРИ „%s“\n" +msgid "Invalid public key for reverse lookup `%s'\n" +msgstr "Неисправан јавни кључ за обратну претрагу „%s“\n" -#: src/namestore/gnunet-namestore.c:750 +#: src/namestore/gnunet-namestore.c:1220 +#: src/peerinfo-tool/gnunet-peerinfo.c:736 #, c-format -msgid "Invalid nick `%s'\n" -msgstr "Неисправан надимак „%s“\n" +msgid "Invalid URI `%s'\n" +msgstr "Неисправан УРИ „%s“\n" -#: src/namestore/gnunet-namestore.c:790 +#: src/namestore/gnunet-namestore.c:1290 #, c-format -msgid "Ego `%s' not known to identity service\n" -msgstr "Его „%s“ није познат услузи идентитета\n" +msgid "Label `%s' contains `.' which is not allowed\n" +msgstr "" -#: src/namestore/gnunet-namestore.c:817 +#: src/namestore/gnunet-namestore.c:1340 #, c-format -msgid "No default ego configured in identity service\n" -msgstr "Није подешен основни его у услузи идентитета\n" +msgid "" +"No default identity configured for `namestore' subsystem\n" +"Run gnunet-identity -s namestore -e $NAME to set the default to $NAME\n" +"Run gnunet-identity -d to get a list of choices for $NAME\n" +msgstr "" -#: src/namestore/gnunet-namestore.c:853 +#: src/namestore/gnunet-namestore.c:1405 #, c-format -msgid "Identity service is not running\n" -msgstr "Услуга идентитета није покренута\n" +msgid "Superfluous command line arguments (starting with `%s') ignored\n" +msgstr "" -#: src/namestore/gnunet-namestore.c:865 +#: src/namestore/gnunet-namestore.c:1434 #, c-format msgid "Cannot connect to identity service\n" msgstr "Не могу да се повежем са услугом идентитета\n" -#: src/namestore/gnunet-namestore.c:913 +#: src/namestore/gnunet-namestore.c:1481 +msgid "Empty record line argument is not allowed.\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:1493 +#, c-format +msgid "Invalid expiration time `%s' (must be without unit)\n" +msgstr "" + +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 +#, fuzzy, c-format +msgid "Missing entries in record line `%s'.\n" +msgstr "Недостаје функција „%s“ у прикључку преноса за „%s“\n" + +#: src/namestore/gnunet-namestore.c:1513 +#, fuzzy, c-format +msgid "Unknown record type `%s'\n" +msgstr "Непозната наредба „%s“\n" + +#: src/namestore/gnunet-namestore.c:1551 +#, fuzzy, c-format +msgid "Invalid record data for type %s: `%s'.\n" +msgstr "Неисправан формат за ИП: „%s“\n" + +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "додаје запис" -#: src/namestore/gnunet-namestore.c:916 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "брише запис" -#: src/namestore/gnunet-namestore.c:919 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "приказује записе" -#: src/namestore/gnunet-namestore.c:922 -msgid "expiration time for record to use (for adding only), \"never\" is possible" +#: src/namestore/gnunet-namestore.c:1622 +msgid "" +"expiration time for record to use (for adding only), \"never\" is possible" msgstr "време истека записа за коришћење (само за додавање), „never“ је могуће" -#: src/namestore/gnunet-namestore.c:925 +#: src/namestore/gnunet-namestore.c:1628 msgid "set the desired nick name for the zone" msgstr "поставља жељени назив надимка за зону" -#: src/namestore/gnunet-namestore.c:928 +#: src/namestore/gnunet-namestore.c:1633 msgid "monitor changes in the namestore" msgstr "прати измене у смештају назива" -#: src/namestore/gnunet-namestore.c:934 +#: src/namestore/gnunet-namestore.c:1645 msgid "determine our name for the given PKEY" msgstr "одређује наш назив за дати „PKEY“" -#: src/namestore/gnunet-namestore.c:937 +#: src/namestore/gnunet-namestore.c:1652 +msgid "" +"set record set to values given by (possibly multiple) RECORDLINES; can be " +"specified multiple times" +msgstr "" + +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "врста записа за додавање/брисање/приказ" -#: src/namestore/gnunet-namestore.c:940 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "УРИ за увоз у нашу зону" -#: src/namestore/gnunet-namestore.c:943 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "вредност записа за додавање/брисање" -#: src/namestore/gnunet-namestore.c:946 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "ствара или исписује јавни запис" -#: src/namestore/gnunet-namestore.c:949 -msgid "create shadow record (only valid if all other records of the same type have expired" -msgstr "прави сеновити запис (важи само ако су сви остали записи исте врсте истекли" +#: src/namestore/gnunet-namestore.c:1679 +msgid "" +"create shadow record (only valid if all other records of the same type have " +"expired" +msgstr "" +"прави сеновити запис (важи само ако су сви остали записи исте врсте истекли" -#: src/namestore/gnunet-namestore.c:952 +#: src/namestore/gnunet-namestore.c:1685 msgid "name of the ego controlling the zone" msgstr "назив егоа који контролише зону" -#: src/namestore/gnunet-namestore-fcfsd.c:464 +#: src/namestore/gnunet-namestore-fcfsd.c:552 #, c-format msgid "Unsupported form value `%s'\n" msgstr "Неподржана вредност облика „%s“\n" -#: src/namestore/gnunet-namestore-fcfsd.c:491 +#: src/namestore/gnunet-namestore-fcfsd.c:579 #, c-format msgid "Failed to create record for domain `%s': %s\n" msgstr "Нисам успео да направим запис за домен „%s“: %s\n" -#: src/namestore/gnunet-namestore-fcfsd.c:525 +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "Грешка приликом мапирања зоне у назив\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 #, c-format msgid "Found existing name `%s' for the given key\n" msgstr "Нађох постојећи назив „%s“ за дати кључ\n" -#: src/namestore/gnunet-namestore-fcfsd.c:534 -msgid "Error when mapping zone to name\n" -msgstr "Грешка приликом мапирања зоне у назив\n" +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "Грешка стварања тунела\n" -#: src/namestore/gnunet-namestore-fcfsd.c:596 +#: src/namestore/gnunet-namestore-fcfsd.c:707 #, c-format msgid "Found %u existing records for domain `%s'\n" msgstr "Нађох %u постојећа записа за домен „%s“\n" -#: src/namestore/gnunet-namestore-fcfsd.c:652 +#: src/namestore/gnunet-namestore-fcfsd.c:796 #, c-format msgid "Failed to create page for `%s'\n" msgstr "Нисам успео да направим страницу за „%s“\n" -#: src/namestore/gnunet-namestore-fcfsd.c:668 +#: src/namestore/gnunet-namestore-fcfsd.c:815 #, c-format msgid "Failed to setup post processor for `%s'\n" msgstr "Нисам успео да поставим постпроцесор за „%s“\n" -#: src/namestore/gnunet-namestore-fcfsd.c:704 +#: src/namestore/gnunet-namestore-fcfsd.c:850 msgid "Domain name must not contain `.'\n" msgstr "Назив домена не сме да садржи „.“\n" -#: src/namestore/gnunet-namestore-fcfsd.c:712 +#: src/namestore/gnunet-namestore-fcfsd.c:859 msgid "Domain name must not contain `+'\n" msgstr "Назив домена не сме да садржи „+“\n" -#: src/namestore/gnunet-namestore-fcfsd.c:910 +#: src/namestore/gnunet-namestore-fcfsd.c:1094 msgid "No ego configured for `fcfsd` subsystem\n" msgstr "Није подешен его за „fcfsd“ подсистем\n" -#: src/namestore/gnunet-namestore-fcfsd.c:936 +#: src/namestore/gnunet-namestore-fcfsd.c:1125 msgid "Failed to start HTTP server\n" msgstr "Нисам успео да покренем ХТТП сервер\n" -#: src/namestore/gnunet-namestore-fcfsd.c:978 +#: src/namestore/gnunet-namestore-fcfsd.c:1173 msgid "Failed to connect to identity\n" msgstr "Нисам успео да се повежем са идентитетом\n" -#: src/namestore/gnunet-namestore-fcfsd.c:1011 +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 msgid "GNU Name System First Come First Serve name registration service" msgstr "Услуга регистрације назива Први Стиже Први Служи ГНУ Система Назива" -#: src/namestore/gnunet-service-namestore.c:655 +#: src/namestore/gnunet-service-namestore.c:866 #, c-format msgid "Failed to replicate block in namecache: %s\n" msgstr "Нисам успео да реплицирам блок у остави назива: %s\n" -#: src/namestore/namestore_api.c:275 +#: src/namestore/gnunet-zoneimport.c:1848 +msgid "size to use for the main hash map" +msgstr "" + +#: src/namestore/gnunet-zoneimport.c:1854 +msgid "minimum expiration time we assume for imported records" +msgstr "" + +#: src/namestore/namestore_api.c:373 msgid "Namestore failed to store record\n" msgstr "Смештај назива није успео да смести запис\n" -#: src/nat/gnunet-nat-server.c:279 +#: src/namestore/plugin_namestore_flat.c:195 #, c-format -msgid "Please pass valid port number as the first argument! (got `%s')\n" -msgstr "Проследите исправан број прикључника као први аргумент! (добих „%s“)\n" +msgid "File too big to map: %llu bytes.\n" +msgstr "" -#: src/nat/gnunet-nat-server.c:321 -msgid "GNUnet NAT traversal test helper daemon" -msgstr "Демон помоћника теста ГНУнет НАТ попречника" +#: src/namestore/plugin_namestore_flat.c:219 +#, c-format +msgid "Namestore database file `%s' malformed\n" +msgstr "" -#: src/nat/nat_auto.c:170 -msgid "NAT traversal with ICMP Server timed out.\n" -msgstr "Истекло је време НАТ попречника са ИЦМП сервером.\n" +#: src/namestore/plugin_namestore_flat.c:792 +#, fuzzy +msgid "Flat file database running\n" +msgstr "База података шаблона ради\n" -#: src/nat/nat_auto.c:203 -msgid "NAT traversal with ICMP Server succeeded.\n" -msgstr "НАТ попречник са ИЦМП сервером је успео.\n" +#: src/namestore/plugin_rest_namestore.c:1103 +#, fuzzy +msgid "Namestore REST API initialized\n" +msgstr "Меш је покренут\n" -#: src/nat/nat_auto.c:204 -msgid "NAT traversal with ICMP Server failed.\n" -msgstr "НАТ попречник са ИЦМП сервером није успео.\n" +#: src/nat-auto/gnunet-nat-auto.c:189 +#, fuzzy +msgid "Suggested configuration changes:\n" +msgstr "Недостају поставке подешавања кључа.\n" -#: src/nat/nat_auto.c:225 -msgid "Testing connection reversal with ICMP server.\n" -msgstr "Тестира обратност везе са ИЦМП сервером.\n" +#: src/nat-auto/gnunet-nat-auto.c:208 +#, fuzzy, c-format +msgid "Failed to write configuration to `%s'\n" +msgstr "Нисам успео да уклоним датотеку подешавања „%s“\n" + +#: src/nat-auto/gnunet-nat-auto.c:215 +#, fuzzy, c-format +msgid "Wrote updated configuration to `%s'\n" +msgstr "Не могу да приступим датотеци подешавања „%s“\n" + +#: src/nat-auto/gnunet-nat-auto.c:327 +#, fuzzy +msgid "run autoconfiguration" +msgstr "# пријатељи у подешавањима" + +#: src/nat-auto/gnunet-nat-auto.c:335 +msgid "section name providing the configuration for the adapter" +msgstr "" + +#: src/nat-auto/gnunet-nat-auto.c:338 src/nat/gnunet-nat.c:446 +msgid "use TCP" +msgstr "" + +#: src/nat-auto/gnunet-nat-auto.c:340 src/nat/gnunet-nat.c:448 +msgid "use UDP" +msgstr "" + +#: src/nat-auto/gnunet-nat-auto.c:345 +msgid "write configuration file (for autoconfiguration)" +msgstr "" + +#: src/nat-auto/gnunet-nat-auto.c:355 +#, fuzzy +msgid "GNUnet NAT traversal autoconfiguration" +msgstr "Демон помоћника теста ГНУнет НАТ попречника" + +#: src/nat-auto/gnunet-nat-auto_legacy.c:377 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:685 +#: src/nat-auto/nat_auto_api_test.c:383 +msgid "Failed to connect to `gnunet-nat-server'\n" +msgstr "Нисам успео да се повежем на „gnunet-nat-server“\n" + +#: src/nat-auto/gnunet-nat-auto_legacy.c:483 +#, c-format +msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" +msgstr "" +"Нисам успео да направим свезу прикључнице ослушкивања ка „%s“ за НАТ тест: " +"%s\n" + +#: src/nat-auto/gnunet-nat-auto_legacy.c:527 +#: src/nat-auto/nat_auto_api_test.c:532 +#, fuzzy +msgid "NAT test failed to start NAT library\n" +msgstr "Смештај назива није успео да смести запис\n" + +#: src/nat-auto/gnunet-service-nat-auto.c:346 +#, fuzzy +msgid "UPnP client `upnpc` command not found, disabling UPnP\n" +msgstr "нисам нашао „upnpc“ наредбу" + +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384 +msgid "NAT traversal with ICMP Server succeeded.\n" +msgstr "НАТ попречник са ИЦМП сервером је успео.\n" + +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385 +msgid "NAT traversal with ICMP Server failed.\n" +msgstr "НАТ попречник са ИЦМП сервером није успео.\n" -#: src/nat/nat_auto.c:274 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405 +msgid "Testing connection reversal with ICMP server.\n" +msgstr "Тестира обратност везе са ИЦМП сервером.\n" + +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437 #, c-format msgid "Detected external IP `%s'\n" msgstr "Откривен је спољни ИП „%s“\n" -#: src/nat/nat_auto.c:344 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:574 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n" msgstr "Овај систем има општу ИПв6 адресу, постављам ИПв6 на подржану.\n" -#: src/nat/nat_auto.c:360 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:592 #, c-format msgid "Detected internal network address `%s'.\n" msgstr "Откривена је унутрашња адреса мреже „%s“.\n" -#: src/nat/nat_auto.c:413 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:727 msgid "upnpc found, enabling its use\n" msgstr "нађох „upnpc“, омогућујем њено коришћење\n" -#: src/nat/nat_auto.c:414 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:728 msgid "upnpc not found\n" msgstr "нисам нашао „upnpc“\n" -#: src/nat/nat_auto.c:447 -msgid "gnunet-helper-nat-server found, testing it\n" -msgstr "нађох „gnunet-helper-nat-server“, тестирам је\n" +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:766 +msgid "test_icmp_server not possible, as we have no public IPv4 address\n" +msgstr "" + +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:779 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:841 +msgid "test_icmp_server not possible, as we are not behind NAT\n" +msgstr "" -#: src/nat/nat_auto.c:448 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:791 +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:853 msgid "No working gnunet-helper-nat-server found\n" msgstr "Нисам нашао радну „gnunet-helper-nat-server“\n" -#: src/nat/nat_auto.c:482 -msgid "gnunet-helper-nat-client found, enabling it\n" -msgstr "нађох „gnunet-helper-nat-client“, омогућавам је\n" - -#: src/nat/nat_auto.c:483 -msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" -msgstr "нисам нашао „gnunet-helper-nat-client“ или иза НАТ-а, искључујем је\n" - -#: src/nat/nat.c:867 -#, c-format -msgid "gnunet-helper-nat-server generated malformed address `%s'\n" -msgstr "„gnunet-helper-nat-server“ је створила лошу адресу „%s“\n" - -#: src/nat/nat.c:917 -#, c-format -msgid "Failed to start %s\n" -msgstr "Нисам успео да покренем „%s“\n" - -#: src/nat/nat.c:1205 -msgid "malformed" -msgstr "лоше" +#: src/nat-auto/gnunet-service-nat-auto_legacy.c:829 +msgid "test_icmp_client not possible, as we have no internal IPv4 address\n" +msgstr "" -#: src/nat/nat.c:1276 src/nat/nat.c:1288 -#, c-format -msgid "Configuration requires `%s', but binary is not installed properly (SUID bit not set). Option disabled.\n" -msgstr "Подешавање захтева „%s“, али бинарно није исправно инсталирано („SUID“ бит није постављен). Опција је искључена.\n" +#: src/nat-auto/nat_auto_api.c:73 +#, fuzzy +msgid "Operation Successful" +msgstr "Опозивање је успело.\n" -#: src/nat/nat.c:1426 -msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" -msgstr "Унутрашња ИП адреса није позната, не могу користити методу ИЦМП НАТ попречника\n" +#: src/nat-auto/nat_auto_api.c:76 +msgid "IPC failure" +msgstr "" -#: src/nat/nat.c:1442 -#, c-format -msgid "Running gnunet-helper-nat-client %s %s %u\n" -msgstr "Извршавам „gnunet-helper-nat-client“ %s %s %u\n" +#: src/nat-auto/nat_auto_api.c:79 +msgid "Failure in network subsystem, check permissions." +msgstr "" -#: src/nat/nat_mini.c:155 -msgid "no valid address was returned by `external-ip'" -msgstr "ниједна исправна адреса није враћена „external-ip“-ом" +#: src/nat-auto/nat_auto_api.c:82 +msgid "Encountered timeout while performing operation" +msgstr "" -#: src/nat/nat_mini.c:175 -msgid "`external-ip' command not found" -msgstr "нисам нашао наредбу „external-ip“" +#: src/nat-auto/nat_auto_api.c:85 +msgid "detected that we are offline" +msgstr "" -#: src/nat/nat_mini.c:201 -msgid "`external-ip' command not found\n" -msgstr "нисам нашао наредбу „external-ip“\n" +#: src/nat-auto/nat_auto_api.c:88 +msgid "`upnpc` command not found" +msgstr "нисам нашао „upnpc“ наредбу" -#: src/nat/nat_mini.c:366 +#: src/nat-auto/nat_auto_api.c:91 msgid "Failed to run `upnpc` command" msgstr "Нисам успео да покренем наредбу „upnpc“" -#: src/nat/nat_mini.c:512 +#: src/nat-auto/nat_auto_api.c:94 msgid "`upnpc' command took too long, process killed" msgstr "„upnpc“ наредби треба превише времена, процес је убијен" -#: src/nat/nat_mini.c:540 +#: src/nat-auto/nat_auto_api.c:97 msgid "`upnpc' command failed to establish port mapping" msgstr "„upnpc“ наредба није успела да успостави мапирање прикључника" -#: src/nat/nat_mini.c:604 -msgid "`upnpc' command not found\n" -msgstr "нисам нашао „upnpc“ наредбу\n" +#: src/nat-auto/nat_auto_api.c:100 +msgid "`external-ip' command not found" +msgstr "нисам нашао наредбу „external-ip“" -#: src/nat/nat_mini.c:608 -msgid "`upnpc` command not found" -msgstr "нисам нашао „upnpc“ наредбу" +#: src/nat-auto/nat_auto_api.c:103 +#, fuzzy +msgid "Failed to run `external-ip` command" +msgstr "Нисам успео да покренем наредбу „upnpc“" -#: src/nat/nat_test.c:351 -msgid "Failed to connect to `gnunet-nat-server'\n" -msgstr "Нисам успео да се повежем на „gnunet-nat-server“\n" +#: src/nat-auto/nat_auto_api.c:106 +#, fuzzy +msgid "`external-ip' command output invalid" +msgstr "нисам нашао наредбу „external-ip“" + +#: src/nat-auto/nat_auto_api.c:109 +msgid "no valid address was returned by `external-ip'" +msgstr "ниједна исправна адреса није враћена „external-ip“-ом" + +#: src/nat-auto/nat_auto_api.c:113 +#, fuzzy +msgid "Could not determine interface with internal/local network address" +msgstr "Не могу да одредим путању инсталирања прикључка.\n" + +#: src/nat-auto/nat_auto_api.c:116 +#, fuzzy +msgid "No functioning gnunet-helper-nat-server installation found" +msgstr "Нисам нашао радну „gnunet-helper-nat-server“\n" + +#: src/nat-auto/nat_auto_api.c:119 +msgid "NAT test could not be initialized" +msgstr "" + +#: src/nat-auto/nat_auto_api.c:122 +msgid "NAT test timeout reached" +msgstr "" + +#: src/nat-auto/nat_auto_api.c:125 +msgid "could not register NAT" +msgstr "" + +#: src/nat-auto/nat_auto_api.c:128 +#, fuzzy +msgid "No working gnunet-helper-nat-client installation found" +msgstr "Нисам нашао радну „gnunet-helper-nat-server“\n" + +#: src/nat-auto/nat_auto_api_test.c:445 +#, fuzzy, c-format +msgid "Failed to find valid PORT in section `%s'\n" +msgstr "Нисам успео да прочитам директоријум „%s“\n" + +#: src/nat-auto/nat_auto_api_test.c:489 +#, fuzzy, c-format +msgid "Failed to create socket bound to `%s' for NAT test: %s\n" +msgstr "" +"Нисам успео да направим свезу прикључнице ослушкивања ка „%s“ за НАТ тест: " +"%s\n" + +#: src/nat/gnunet-nat.c:422 +msgid "which IP and port are we locally using to bind/listen to" +msgstr "" + +#: src/nat/gnunet-nat.c:430 +msgid "which remote IP and port should be asked for connection reversal" +msgstr "" + +#: src/nat/gnunet-nat.c:438 +msgid "" +"name of configuration section to find additional options, such as manual " +"host punching data" +msgstr "" + +#: src/nat/gnunet-nat.c:443 +msgid "enable STUN processing" +msgstr "" + +#: src/nat/gnunet-nat.c:453 +msgid "watch for connection reversal requests" +msgstr "" -#: src/nat/nat_test.c:423 +#: src/nat/gnunet-nat.c:464 +#, fuzzy +msgid "GNUnet NAT traversal autoconfigure daemon" +msgstr "Демон помоћника теста ГНУнет НАТ попречника" + +#: src/nat/gnunet-service-nat.c:1351 #, c-format -msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" -msgstr "Нисам успео да направим свезу прикључнице ослушкивања ка „%s“ за НАТ тест: %s\n" +msgid "Malformed punched hole specification `%s' (lacks port)\n" +msgstr "" + +#: src/nat/gnunet-service-nat.c:1362 +#, c-format +msgid "Invalid port number in punched hole specification `%s' (lacks port)\n" +msgstr "" + +#: src/nat/gnunet-service-nat.c:1378 +#, c-format +msgid "Malformed punched hole specification `%s' (lacks `]')\n" +msgstr "" + +#: src/nat/gnunet-service-nat.c:1390 +#, c-format +msgid "Malformed punched hole specification `%s' (IPv6 address invalid)" +msgstr "" + +#: src/nat/gnunet-service-nat.c:1861 +#, fuzzy +msgid "Connection reversal request failed\n" +msgstr "Веза је успостављена.\n" + +#: src/nat/gnunet-service-nat.c:1935 +msgid "" +"UPnP enabled in configuration, but UPnP client `upnpc` command not found, " +"disabling UPnP\n" +msgstr "" + +#: src/nat/gnunet-service-nat_helper.c:175 +#, c-format +msgid "gnunet-helper-nat-server generated malformed address `%s'\n" +msgstr "„gnunet-helper-nat-server“ је створила лошу адресу „%s“\n" + +#: src/nat/gnunet-service-nat_helper.c:249 +#, c-format +msgid "Failed to start %s\n" +msgstr "Нисам успео да покренем „%s“\n" -#: src/nse/gnunet-nse.c:117 -msgid "NSE service is not running\n" -msgstr "НСЕ услуга није покренута\n" +#: src/nat/gnunet-service-nat_mini.c:188 +msgid "`external-ip' command not found\n" +msgstr "нисам нашао наредбу „external-ip“\n" -#: src/nse/gnunet-nse.c:122 -msgid "Error while checking if NSE service is running or not\n" -msgstr "Грешка приликом проверавања да ли НСЕ услуга ради или не\n" +#: src/nat/gnunet-service-nat_mini.c:607 +msgid "`upnpc' command not found\n" +msgstr "нисам нашао „upnpc“ наредбу\n" -#: src/nse/gnunet-nse.c:168 +#: src/nse/gnunet-nse.c:124 msgid "Show network size estimates from NSE service." msgstr "Показује процене величине мреже из НСЕ услуге." -#: src/nse/gnunet-nse-profiler.c:858 +#: src/nse/gnunet-nse-profiler.c:857 msgid "limit to the number of connections to NSE services, 0 for none" msgstr "ограничење броја веза на НСЕ услуге, 0 за ништа" -#: src/nse/gnunet-nse-profiler.c:861 +#: src/nse/gnunet-nse-profiler.c:864 msgid "name of the file for writing connection information and statistics" msgstr "назив датотеке за записивање података везе и статистику" -#: src/nse/gnunet-nse-profiler.c:864 src/testbed/gnunet-testbed-profiler.c:306 -msgid "name of the file with the login information for the testbed" -msgstr "назив датотеке са подацима пријављивања за пробно место" - -#: src/nse/gnunet-nse-profiler.c:867 +#: src/nse/gnunet-nse-profiler.c:879 msgid "name of the file for writing the main results" msgstr "назив датотеке за записивање главних резултата" -#: src/nse/gnunet-nse-profiler.c:870 +#: src/nse/gnunet-nse-profiler.c:888 msgid "Number of peers to run in each round, separated by commas" msgstr "Број парњака за покретање у свакој рунди, раздвојени зарезима" -#: src/nse/gnunet-nse-profiler.c:876 +#: src/nse/gnunet-nse-profiler.c:900 msgid "delay between rounds" msgstr "застој између рунди" -#: src/nse/gnunet-nse-profiler.c:885 +#: src/nse/gnunet-nse-profiler.c:912 msgid "Measure quality and performance of the NSE service." msgstr "Мери квалитет и учинковитост НСЕ услуге." -#: src/nse/gnunet-service-nse.c:1517 -#: src/revocation/gnunet-service-revocation.c:789 src/util/gnunet-scrypt.c:248 +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 msgid "Value is too large.\n" msgstr "Вредност је превелика.\n" -#: src/peerinfo/gnunet-service-peerinfo.c:215 +#: src/peerinfo/gnunet-service-peerinfo.c:175 #, c-format msgid "Removing expired address of transport `%s'\n" msgstr "Уклањам истеклу адресу преноса „%s“\n" -#: src/peerinfo/gnunet-service-peerinfo.c:352 +#: src/peerinfo/gnunet-service-peerinfo.c:306 #, c-format msgid "Failed to parse HELLO in file `%s': %s\n" msgstr "Нисам успео да обрадим „HELLO“ у датотеци „%s“: %s\n" -#: src/peerinfo/gnunet-service-peerinfo.c:371 -#: src/peerinfo/gnunet-service-peerinfo.c:388 +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 #, c-format msgid "Failed to parse HELLO in file `%s'\n" msgstr "Нисам успео да обрадим „HELLO“ у датотеци „%s“\n" -#: src/peerinfo/gnunet-service-peerinfo.c:466 +#: src/peerinfo/gnunet-service-peerinfo.c:426 msgid "# peers known" msgstr "# парњака је познато" -#: src/peerinfo/gnunet-service-peerinfo.c:503 +#: src/peerinfo/gnunet-service-peerinfo.c:468 #, c-format -msgid "File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "Датотека „%s“ у директоријуму „%s“ не одговара договору именовања. Уклоњена је.\n" +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" +msgstr "" +"Датотека „%s“ у директоријуму „%s“ не одговара договору именовања. Уклоњена " +"је.\n" -#: src/peerinfo/gnunet-service-peerinfo.c:653 +#: src/peerinfo/gnunet-service-peerinfo.c:624 #, c-format msgid "Scanning directory `%s'\n" msgstr "Скенирам директоријум „%s“\n" -#: src/peerinfo/gnunet-service-peerinfo.c:658 +#: src/peerinfo/gnunet-service-peerinfo.c:631 #, c-format msgid "Still no peers found in `%s'!\n" msgstr "Још увек нисам нашао парњаке у „%s“!\n" -#: src/peerinfo/gnunet-service-peerinfo.c:994 +#: src/peerinfo/gnunet-service-peerinfo.c:1024 #, c-format msgid "Cleaning up directory `%s'\n" msgstr "Чистим директоријум „%s“\n" -#: src/peerinfo/gnunet-service-peerinfo.c:1287 +#: src/peerinfo/gnunet-service-peerinfo.c:1319 #, c-format msgid "Importing HELLOs from `%s'\n" msgstr "Увозим „HELLO“-е из „%s“\n" -#: src/peerinfo/gnunet-service-peerinfo.c:1298 +#: src/peerinfo/gnunet-service-peerinfo.c:1332 msgid "Skipping import of included HELLOs\n" msgstr "Прескачем увоз укључених „HELLO“-а\n" -#: src/peerinfo/peerinfo_api.c:236 -msgid "aborted due to explicit disconnect request" -msgstr "прекинуто услед изричитог захтева прекида везе" - -#: src/peerinfo/peerinfo_api.c:356 -msgid "failed to transmit request (service down?)" -msgstr "нисам успео да пренесем захтев (услуга је пала?)" - -#: src/peerinfo/peerinfo_api.c:506 +#: src/peerinfo/peerinfo_api.c:217 msgid "Failed to receive response from `PEERINFO' service." msgstr "Нисам успео да примим одговор са услуге „PEERINFO“." -#: src/peerinfo/peerinfo_api.c:547 src/peerinfo/peerinfo_api.c:566 -#: src/peerinfo/peerinfo_api.c:581 src/peerinfo/peerinfo_api.c:592 -#: src/peerinfo/peerinfo_api.c:603 -msgid "Received invalid message from `PEERINFO' service." -msgstr "Примих неисправну поруку са услуге „PEERINFO“." - -#: src/peerinfo/peerinfo_api.c:678 -msgid "Timeout transmitting iteration request to `PEERINFO' service." -msgstr "Истекло је време преношења захтева понављања ка услузи „ПОДАЦИ_ПАРЊАКА“." - -#: src/peerinfo/peerinfo_api_notify.c:268 -#, c-format -msgid "Could not connect to `%s' service.\n" -msgstr "Не могу да се повежем са „%s“ услугом.\n" - -#: src/peerinfo-tool/gnunet-peerinfo.c:232 +#: src/peerinfo-tool/gnunet-peerinfo.c:237 #, c-format msgid "%sPeer `%s'\n" msgstr "%sПарњак „%s“\n" -#: src/peerinfo-tool/gnunet-peerinfo.c:239 +#: src/peerinfo-tool/gnunet-peerinfo.c:244 #, c-format msgid "\tExpires: %s \t %s\n" msgstr "\tИстиче: %s \t %s\n" -#: src/peerinfo-tool/gnunet-peerinfo.c:428 -#, c-format -msgid "Failure: Did not receive %s\n" -msgstr "Неуспех: Нисам примио „%s“\n" +#: src/peerinfo-tool/gnunet-peerinfo.c:292 +#: src/peerinfo-tool/plugin_rest_peerinfo.c:523 +#, fuzzy, c-format +msgid "Failure: Cannot convert address to string for peer `%s'\n" +msgstr "Нисам успео да решим адресу за парњака „%s“\n" -#: src/peerinfo-tool/gnunet-peerinfo.c:436 +#: src/peerinfo-tool/gnunet-peerinfo.c:451 #, c-format msgid "Failure: Received invalid %s\n" msgstr "Неуспех: Примих неисправно „%s“\n" -#: src/peerinfo-tool/gnunet-peerinfo.c:445 +#: src/peerinfo-tool/gnunet-peerinfo.c:463 #, c-format msgid "Failed to write HELLO with %u bytes to file `%s'\n" msgstr "Нисам успео да упишем „HELLO“ са %u бајта у датотеку „%s“\n" -#: src/peerinfo-tool/gnunet-peerinfo.c:458 +#: src/peerinfo-tool/gnunet-peerinfo.c:479 #, c-format msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n" msgstr "Записах „%s HELLO“ које садржи %u адресе са %u бајта у датотеку „%s“\n" -#: src/peerinfo-tool/gnunet-peerinfo.c:522 -#, c-format -msgid "Failure adding HELLO: %s\n" -msgstr "Неуспех додавања „HELLO“-а: %s\n" - -#: src/peerinfo-tool/gnunet-peerinfo.c:633 -#, c-format -msgid "Service `%s' is not running, please start GNUnet\n" -msgstr "Услуга „%s“ није покренута, покрените ГНУнет\n" - -#: src/peerinfo-tool/gnunet-peerinfo.c:654 src/util/gnunet-scrypt.c:224 -#, c-format -msgid "Loading hostkey from `%s' failed.\n" -msgstr "Учитавање кључа домаћина из „%s“ није успело.\n" - -#: src/peerinfo-tool/gnunet-peerinfo.c:745 +#: src/peerinfo-tool/gnunet-peerinfo.c:758 #, c-format msgid "I am peer `%s'.\n" msgstr "Ја сам парњак „%s“.\n" -#: src/peerinfo-tool/gnunet-peerinfo.c:789 +#: src/peerinfo-tool/gnunet-peerinfo.c:799 msgid "don't resolve host names" msgstr "не разрешава називе домаћина" -#: src/peerinfo-tool/gnunet-peerinfo.c:792 +#: src/peerinfo-tool/gnunet-peerinfo.c:805 msgid "output only the identity strings" msgstr "исписује само ниске идентитета" -#: src/peerinfo-tool/gnunet-peerinfo.c:795 +#: src/peerinfo-tool/gnunet-peerinfo.c:810 msgid "include friend-only information" msgstr "укључује податке само-пријатељ" -#: src/peerinfo-tool/gnunet-peerinfo.c:798 +#: src/peerinfo-tool/gnunet-peerinfo.c:815 msgid "output our own identity only" msgstr "исписује само наш лични идентитет" -#: src/peerinfo-tool/gnunet-peerinfo.c:801 +#: src/peerinfo-tool/gnunet-peerinfo.c:820 msgid "list all known peers" msgstr "исписује све познате парњаке" -#: src/peerinfo-tool/gnunet-peerinfo.c:804 +#: src/peerinfo-tool/gnunet-peerinfo.c:826 msgid "dump hello to file" msgstr "шаље „hello“ у датотеку" -#: src/peerinfo-tool/gnunet-peerinfo.c:807 +#: src/peerinfo-tool/gnunet-peerinfo.c:831 msgid "also output HELLO uri(s)" msgstr "такође исписује „HELLO“ ури-је" -#: src/peerinfo-tool/gnunet-peerinfo.c:810 +#: src/peerinfo-tool/gnunet-peerinfo.c:838 msgid "add given HELLO uri to the database" msgstr "додаје дату „HELLO“ путању у базу података" -#: src/peerinfo-tool/gnunet-peerinfo.c:821 +#: src/peerinfo-tool/gnunet-peerinfo.c:852 msgid "Print information about peers." msgstr "Исписује податке о парњацима." -#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105 -#: src/transport/gnunet-service-transport_plugins.c:128 +#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103 +#: src/transport/gnunet-service-transport_plugins.c:167 #, c-format msgid "Starting transport plugins `%s'\n" msgstr "Покрећем прикључке преноса „%s“\n" -#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109 -#: src/transport/gnunet-service-transport_plugins.c:133 +#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107 +#: src/transport/gnunet-service-transport_plugins.c:172 #, c-format msgid "Loading `%s' transport plugin\n" msgstr "Учитавам „%s“ прикључак преноса\n" -#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129 -#: src/transport/gnunet-service-transport_plugins.c:165 +#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127 +#: src/transport/gnunet-service-transport_plugins.c:207 #, c-format msgid "Failed to load transport plugin for `%s'\n" msgstr "Нисам успео да учитам прикључак преноса за „%s“\n" -#: src/postgres/postgres.c:59 -#, c-format -msgid "`%s:%s' failed at %s:%d with error: %s" -msgstr "`%s:%s' није успело на %s:%d са грешком: %s" - -#: src/postgres/postgres.c:148 -#, c-format -msgid "Unable to initialize Postgres: %s" -msgstr "Не могу да покренем Постгрес: %s" - -#: src/psycstore/gnunet-service-psycstore.c:200 -msgid "Failed to store membership information!\n" -msgstr "Нисам успео да сместим податке о чланству!\n" - -#: src/psycstore/gnunet-service-psycstore.c:224 -msgid "Failed to test membership!\n" -msgstr "Нисам успео да тестирам чланство!\n" - -#: src/psycstore/gnunet-service-psycstore.c:246 -msgid "Failed to store fragment!\n" -msgstr "Нисам успео да сместим делић!\n" - -#: src/psycstore/gnunet-service-psycstore.c:272 -msgid "Failed to get fragment!\n" -msgstr "Нисам успео да добавим делић!\n" - -#: src/psycstore/gnunet-service-psycstore.c:299 -msgid "Failed to get message!\n" -msgstr "Нисам успео да добавим поруку!\n" - -#: src/psycstore/gnunet-service-psycstore.c:328 -msgid "Failed to get message fragment!\n" -msgstr "Нисам успео да добавим делић поруке!\n" - -#: src/psycstore/gnunet-service-psycstore.c:356 -msgid "Failed to get master counters!\n" -msgstr "Нисам успео да добавим главне бројаче!\n" - -#: src/psycstore/gnunet-service-psycstore.c:392 -#: src/psycstore/gnunet-service-psycstore.c:465 -msgid "Tried to set invalid state variable name!\n" -msgstr "Покушах да поставим назив променљиве неисправног стања!\n" - -#: src/psycstore/gnunet-service-psycstore.c:408 -msgid "Failed to begin modifying state!\n" -msgstr "Нисам успео да започнем стање измене!\n" - -#: src/psycstore/gnunet-service-psycstore.c:431 -#, c-format -msgid "Unknown operator: %c\n" -msgstr "Непознат оператор: %c\n" - -#: src/psycstore/gnunet-service-psycstore.c:441 -msgid "Failed to end modifying state!\n" -msgstr "Нисам успео да завршим стање измене!\n" - -#: src/psycstore/gnunet-service-psycstore.c:479 -msgid "Failed to begin synchronizing state!\n" -msgstr "Нисам успео да започнем стање усклађивања!\n" +#: src/peerinfo-tool/plugin_rest_peerinfo.c:809 +msgid "Peerinfo REST API initialized\n" +msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:495 -msgid "Failed to end synchronizing state!\n" -msgstr "Нисам успео да завршим стање усклађивања!\n" +#: src/peerstore/gnunet-peerstore.c:92 +msgid "peerstore" +msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:515 -#: src/psycstore/gnunet-service-psycstore.c:534 -msgid "Failed to reset state!\n" -msgstr "Нисам успео да повратим стање!\n" +#: src/peerstore/gnunet-service-peerstore.c:561 +#, fuzzy, c-format +msgid "Could not load database backend `%s'\n" +msgstr "Не могу да отворим „%s“.\n" -#: src/psycstore/gnunet-service-psycstore.c:557 -#: src/psycstore/gnunet-service-psycstore.c:608 -msgid "Tried to get invalid state variable name!\n" -msgstr "Покушах да добавим назив променљиве неисправног стања!\n" +#: src/peerstore/peerstore_api.c:594 src/peerstore/peerstore_api.c:642 +msgid "Unexpected iteration response, this should not happen.\n" +msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:584 -#: src/psycstore/gnunet-service-psycstore.c:623 -msgid "Failed to get state variable!\n" -msgstr "Нисам успео да добавим променљиву стања!\n" +#: src/peerstore/peerstore_api.c:656 +#, fuzzy +msgid "Received a malformed response from service." +msgstr "Примих лош ДНС захтев од „%s“\n" -#: src/psycstore/plugin_psycstore_sqlite.c:60 -#, c-format -msgid "`%s' failed at %s:%d with error: %s (%d)\n" -msgstr "„%s“ није успело на %s:%d са грешком: %s (%d)\n" +#: src/peerstore/peerstore_api.c:781 +msgid "Received a watch result for a non existing watch.\n" +msgstr "" -#: src/psycstore/plugin_psycstore_sqlite.c:253 +#: src/peerstore/plugin_peerstore_sqlite.c:458 #, c-format msgid "" -"Error preparing SQL query: %s\n" +"Error executing SQL query: %s\n" " %s\n" msgstr "" -"Грешка припремања СКуЛ упита: %s\n" +"Грешка извршавања СКуЛ упита: %s\n" " %s\n" -#: src/psycstore/plugin_psycstore_sqlite.c:276 +#: src/peerstore/plugin_peerstore_sqlite.c:493 #, c-format msgid "" -"Error executing SQL query: %s\n" +"Error preparing SQL query: %s\n" " %s\n" msgstr "" -"Грешка извршавања СКуЛ упита: %s\n" +"Грешка припремања СКуЛ упита: %s\n" " %s\n" -#: src/psycstore/plugin_psycstore_sqlite.c:1796 -msgid "SQLite database running\n" -msgstr "База података СКуЛајта ради\n" +#: src/peerstore/plugin_peerstore_sqlite.c:575 +#, fuzzy, c-format +msgid "Unable to create indices: %s.\n" +msgstr "Нисам успео да направим индексе\n" + +#: src/pq/pq_prepare.c:109 +#, fuzzy, c-format +msgid "PQprepare (`%s' as `%s') failed with error: %s\n" +msgstr "„%s“ за „%s“ није успело на %s:%d са грешком: %s\n" -#: src/pt/gnunet-daemon-pt.c:482 +#: src/pt/gnunet-daemon-pt.c:418 msgid "Failed to pack DNS request. Dropping.\n" msgstr "Нисам успео да упакујем ДНС захтев. Одбацујем.\n" -#: src/pt/gnunet-daemon-pt.c:488 +#: src/pt/gnunet-daemon-pt.c:424 msgid "# DNS requests mapped to VPN" msgstr "# ДНС захтеви су мапирани у ВПН" -#: src/pt/gnunet-daemon-pt.c:541 +#: src/pt/gnunet-daemon-pt.c:478 msgid "# DNS records modified" msgstr "# ДНС записи су измењени" -#: src/pt/gnunet-daemon-pt.c:717 +#: src/pt/gnunet-daemon-pt.c:673 msgid "# DNS replies intercepted" msgstr "# ДНС одговори су пресретени" -#: src/pt/gnunet-daemon-pt.c:723 +#: src/pt/gnunet-daemon-pt.c:680 msgid "Failed to parse DNS request. Dropping.\n" msgstr "Нисам успео да обрадим ДНС захтев. Одбацујем.\n" -#: src/pt/gnunet-daemon-pt.c:826 +#: src/pt/gnunet-daemon-pt.c:718 msgid "# DNS requests dropped (timeout)" msgstr "# ДНС захтеви су одбачени (истекло је време)" -#: src/pt/gnunet-daemon-pt.c:883 +#: src/pt/gnunet-daemon-pt.c:773 msgid "# DNS requests intercepted" msgstr "# ДНС захтеви су пресретени" -#: src/pt/gnunet-daemon-pt.c:888 -msgid "# DNS requests dropped (DNS mesh channel down)" +#: src/pt/gnunet-daemon-pt.c:779 +#, fuzzy +msgid "# DNS requests dropped (DNS cadet channel down)" msgstr "# ДНС захтеви су одбачени (ДНС меш канал је пао)" -#: src/pt/gnunet-daemon-pt.c:896 +#: src/pt/gnunet-daemon-pt.c:788 msgid "# DNS requests dropped (malformed)" msgstr "# ДНС захтеви су одбачени (лоши су)" -#: src/pt/gnunet-daemon-pt.c:969 +#: src/pt/gnunet-daemon-pt.c:883 msgid "# DNS replies received" msgstr "# ДНС одговори су примљени" -#: src/pt/gnunet-daemon-pt.c:985 +#: src/pt/gnunet-daemon-pt.c:900 msgid "# DNS replies dropped (too late?)" msgstr "# ДНС одговори су одбачени (прекасно је?)" -#: src/pt/gnunet-daemon-pt.c:1261 src/pt/gnunet-daemon-pt.c:1270 -#: src/pt/gnunet-daemon-pt.c:1290 src/pt/gnunet-daemon-pt.c:1301 -#: src/pt/gnunet-daemon-pt.c:1310 +#: src/pt/gnunet-daemon-pt.c:1225 src/pt/gnunet-daemon-pt.c:1234 +#: src/pt/gnunet-daemon-pt.c:1250 src/pt/gnunet-daemon-pt.c:1259 +#: src/pt/gnunet-daemon-pt.c:1268 #, c-format msgid "Failed to connect to %s service. Exiting.\n" msgstr "Нисам успео да се повежем са „%s“ услугом. Излазим.\n" -#: src/pt/gnunet-daemon-pt.c:1347 +#: src/pt/gnunet-daemon-pt.c:1314 msgid "Daemon to run to perform IP protocol translation to GNUnet" msgstr "Демон за покретање за обављање превода ИП протокола у ГНУнет" -#: src/regex/gnunet-daemon-regexprofiler.c:270 -#: src/regex/gnunet-regex-simulation-profiler.c:659 +#: src/reclaim/gnunet-reclaim.c:801 +#, fuzzy, c-format +msgid "Ego is required\n" +msgstr "Потребна је исправна врста\n" + +#: src/reclaim/gnunet-reclaim.c:808 +#, c-format +msgid "Attribute value missing!\n" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:815 +#, fuzzy, c-format +msgid "Requesting party key is required!\n" +msgstr "аргумент „--section“ је потребан\n" + +#: src/reclaim/gnunet-reclaim.c:833 +msgid "Add an attribute NAME" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:838 +msgid "Delete the attribute with ID" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:843 +msgid "The attribute VALUE" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:848 +msgid "The EGO to use" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:854 +msgid "Specify the relying party for issue" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:858 +msgid "List attributes for EGO" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:862 +msgid "List credentials for EGO" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:868 +msgid "Credential to use for attribute" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:873 +msgid "Credential name" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:879 +msgid "Issue a ticket for a set of attributes separated by comma" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:884 +msgid "Consume a ticket" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:889 +msgid "Revoke a ticket" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:894 +msgid "Type of attribute" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:899 +msgid "Type of credential" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:903 +msgid "List tickets of ego" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:909 +msgid "Expiration interval of the attribute" +msgstr "" + +#: src/reclaim/gnunet-reclaim.c:917 +msgid "re:claimID command line tool" +msgstr "" + +#: src/reclaim/plugin_rest_openid_connect.c:2613 +msgid "OpenID Connect REST API initialized\n" +msgstr "" + +#: src/reclaim/plugin_rest_reclaim.c:1502 +msgid "Identity Provider REST API initialized\n" +msgstr "" + +#: src/reclaim/reclaim_api.c:545 +#, fuzzy +msgid "failed to store record\n" +msgstr "Смештај назива није успео да смести запис\n" + +#: src/regex/gnunet-daemon-regexprofiler.c:268 #, c-format msgid "%s service is lacking key configuration settings (%s). Exiting.\n" msgstr "„%s“ услузи недостају поставке подешавања кључа (%s). Излазим.\n" -#: src/regex/gnunet-daemon-regexprofiler.c:380 -msgid "Daemon to announce regular expressions for the peer using mesh." +#: src/regex/gnunet-daemon-regexprofiler.c:384 +#, fuzzy +msgid "Daemon to announce regular expressions for the peer using cadet." msgstr "Демон за најаву регуларних израза за парњака који користи меш." -#: src/regex/gnunet-regex-profiler.c:1288 +#: src/regex/gnunet-regex-profiler.c:1390 msgid "No configuration file given. Exiting\n" msgstr "Није дата датотека подешавања. Излазим\n" -#: src/regex/gnunet-regex-profiler.c:1299 -msgid "Configuration option \"regex_prefix\" missing. Exiting\n" -msgstr "Недостаје опција подешавања „regex_prefix“. Излазим\n" - -#: src/regex/gnunet-regex-profiler.c:1328 -#: src/regex/gnunet-regex-simulation-profiler.c:622 +#: src/regex/gnunet-regex-profiler.c:1432 +#: src/regex/gnunet-regex-simulation-profiler.c:631 #, c-format msgid "No policy directory specified on command line. Exiting.\n" msgstr "На линији наредби није наведен директоријум политике. Излазим.\n" -#: src/regex/gnunet-regex-profiler.c:1334 -#: src/regex/gnunet-regex-simulation-profiler.c:629 +#: src/regex/gnunet-regex-profiler.c:1438 +#: src/regex/gnunet-regex-simulation-profiler.c:639 #, c-format msgid "Specified policies directory does not exist. Exiting.\n" msgstr "Наведени директоријум политике не постоји. Излазим.\n" -#: src/regex/gnunet-regex-profiler.c:1341 +#: src/regex/gnunet-regex-profiler.c:1446 #, c-format msgid "No files found in `%s'\n" msgstr "Нисам нашао датотеке у „%s“\n" -#: src/regex/gnunet-regex-profiler.c:1350 +#: src/regex/gnunet-regex-profiler.c:1455 msgid "No search strings file given. Exiting.\n" msgstr "Није дата датотека ниски претраге. Излазим.\n" -#: src/regex/gnunet-regex-profiler.c:1370 +#: src/regex/gnunet-regex-profiler.c:1475 msgid "Error loading search strings. Exiting.\n" msgstr "Грешка учитавања ниски претраге. Излазим.\n" -#: src/regex/gnunet-regex-profiler.c:1455 +#: src/regex/gnunet-regex-profiler.c:1563 msgid "name of the file for writing statistics" msgstr "назив датотеке за записивање статистике" -#: src/regex/gnunet-regex-profiler.c:1458 +#: src/regex/gnunet-regex-profiler.c:1570 msgid "wait TIMEOUT before ending the experiment" msgstr "чека ВРЕМЕ_ИСТЕКА пре завршавања експеримента" -#: src/regex/gnunet-regex-profiler.c:1461 +#: src/regex/gnunet-regex-profiler.c:1576 msgid "directory with policy files" msgstr "директоријум са датотекама политике" -#: src/regex/gnunet-regex-profiler.c:1464 +#: src/regex/gnunet-regex-profiler.c:1584 msgid "name of file with input strings" msgstr "назив датотеке са улазним нискама" -#: src/regex/gnunet-regex-profiler.c:1467 +#: src/regex/gnunet-regex-profiler.c:1591 msgid "name of file with hosts' names" msgstr "назив датотеке са називима домаћина" -#: src/regex/gnunet-regex-profiler.c:1479 +#: src/regex/gnunet-regex-profiler.c:1604 msgid "Profiler for regex" msgstr "Профилатор за регуларни израз" -#: src/regex/gnunet-regex-simulation-profiler.c:689 +#: src/regex/gnunet-regex-simulation-profiler.c:700 msgid "name of the table to write DFAs" msgstr "назив табеле за уписивање ДФА-са" -#: src/regex/gnunet-regex-simulation-profiler.c:692 +#: src/regex/gnunet-regex-simulation-profiler.c:706 msgid "maximum path compression length" msgstr "највећа дужина сажимања путање" -#: src/regex/gnunet-regex-simulation-profiler.c:705 +#: src/regex/gnunet-regex-simulation-profiler.c:720 msgid "Profiler for regex library" msgstr "Профилатор за библиотеку регуларног израза" -#: src/regex/regex_api.c:131 +#: src/regex/regex_api_announce.c:151 #, c-format msgid "Regex `%s' is too long!\n" msgstr "Регуларни израз „%s“ је превелик!\n" -#: src/revocation/gnunet-revocation.c:126 +#: src/regex/regex_api_search.c:212 +#, fuzzy, c-format +msgid "Search string `%s' is too long!\n" +msgstr "Регуларни израз „%s“ је превелик!\n" + +#: src/rest/gnunet-rest-server.c:1266 +#, fuzzy +msgid "GNUnet REST server" +msgstr "Алат ГНУнет ГНС решавача" + +#: src/rest/plugin_rest_config.c:427 +msgid "CONFIG REST API initialized\n" +msgstr "" + +#: src/rest/plugin_rest_copying.c:211 +msgid "COPYING REST API initialized\n" +msgstr "" + +#: src/revocation/gnunet-revocation.c:114 +#, fuzzy +msgid "Shutting down...\n" +msgstr "Покрећем %s...\n" + +#: src/revocation/gnunet-revocation.c:146 #, c-format msgid "Key `%s' is valid\n" msgstr "Кључ „%s“ је исправан\n" -#: src/revocation/gnunet-revocation.c:131 +#: src/revocation/gnunet-revocation.c:150 #, c-format msgid "Key `%s' has been revoked\n" msgstr "Тастер „%s“ је опозван\n" -#: src/revocation/gnunet-revocation.c:137 +#: src/revocation/gnunet-revocation.c:154 msgid "Internal error\n" msgstr "Унутрашња грешка\n" -#: src/revocation/gnunet-revocation.c:163 +#: src/revocation/gnunet-revocation.c:180 #, c-format msgid "Key for ego `%s' is still valid, revocation failed (!)\n" msgstr "Кључ за его „%s“ још увек важи, опозивање није успело (!)\n" -#: src/revocation/gnunet-revocation.c:168 +#: src/revocation/gnunet-revocation.c:183 msgid "Revocation failed (!)\n" msgstr "Опозивање није успело (!)\n" -#: src/revocation/gnunet-revocation.c:173 +#: src/revocation/gnunet-revocation.c:189 #, c-format msgid "Key for ego `%s' has been successfully revoked\n" msgstr "Кључ за его „%s“ је успешно опозван\n" -#: src/revocation/gnunet-revocation.c:178 +#: src/revocation/gnunet-revocation.c:192 msgid "Revocation successful.\n" msgstr "Опозивање је успело.\n" -#: src/revocation/gnunet-revocation.c:183 +#: src/revocation/gnunet-revocation.c:198 msgid "Internal error, key revocation might have failed\n" msgstr "Унутрашња грешка, опозив кључа можда није успео\n" -#: src/revocation/gnunet-revocation.c:294 -#, c-format +#: src/revocation/gnunet-revocation.c:252 +msgid "Cancelling calculation.\n" +msgstr "" + +#: src/revocation/gnunet-revocation.c:299 +#, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "Уверење опозива за „%s“ је смештено у „%s“\n" -#: src/revocation/gnunet-revocation.c:324 +#: src/revocation/gnunet-revocation.c:339 #, c-format msgid "Ego `%s' not found.\n" msgstr "Нисам нашао его „%s“.\n" -#: src/revocation/gnunet-revocation.c:345 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "Грешка: уверење опозива у „%s“ није за „%s“\n" -#: src/revocation/gnunet-revocation.c:365 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "Уверење опозива је спремно\n" -#: src/revocation/gnunet-revocation.c:375 +#: src/revocation/gnunet-revocation.c:378 +msgid "Continuing calculation where left off...\n" +msgstr "" + +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "Уверење опозива није спремно, израчунавам доказ о раду\n" -#: src/revocation/gnunet-revocation.c:407 +#: src/revocation/gnunet-revocation.c:423 #, c-format msgid "Public key `%s' malformed\n" msgstr "Јавни кључ „%s“ је лош\n" -#: src/revocation/gnunet-revocation.c:421 -msgid "Testing and revoking at the same time is not allowed, only executing test.\n" -msgstr "Тестирање и опозивање у исто време није дозвољено, само тестирање извршавам.\n" +#: src/revocation/gnunet-revocation.c:433 +msgid "" +"Testing and revoking at the same time is not allowed, only executing test.\n" +msgstr "" +"Тестирање и опозивање у исто време није дозвољено, само тестирање " +"извршавам.\n" -#: src/revocation/gnunet-revocation.c:441 +#: src/revocation/gnunet-revocation.c:463 msgid "No filename to store revocation certificate given.\n" msgstr "Није дат назив датотеке за смештање уверења опозива.\n" -#: src/revocation/gnunet-revocation.c:463 +#: src/revocation/gnunet-revocation.c:480 #, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "Нисам успео да прочитам уверење опозива из „%s“\n" #: src/revocation/gnunet-revocation.c:488 +#, fuzzy, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "Уверење опозива за „%s“ је смештено у „%s“\n" + +#: src/revocation/gnunet-revocation.c:510 msgid "No action specified. Nothing to do.\n" msgstr "Није наведена ниједна радња. Немам шта да радим.\n" -#: src/revocation/gnunet-revocation.c:504 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "користи НАЗИВ за назив датотеке опозивања" -#: src/revocation/gnunet-revocation.c:507 -msgid "revoke the private key associated for the the private key associated with the ego NAME " +#: src/revocation/gnunet-revocation.c:537 +msgid "" +"revoke the private key associated for the the private key associated with " +"the ego NAME " msgstr "опозива лични кључ придружен личном кључу са его НАЗИВОМ " -#: src/revocation/gnunet-revocation.c:510 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "заправо обавља опозив, у супротном само радимо предизрачунавање" -#: src/revocation/gnunet-revocation.c:513 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "тестира да ли је јавни кључ КЉУЧ опозван" -#: src/revocation/gnunet-service-revocation.c:272 -msgid "Duplicate revocation received from peer. Ignored.\n" +#: src/revocation/gnunet-revocation.c:557 +msgid "number of epochs to calculate for" +msgstr "" + +#: src/revocation/gnunet-service-revocation.c:494 +#, fuzzy +msgid "# unsupported revocations received via set union" msgstr "Двоструки опзив је примљен од парњака. Занемарено.\n" -#: src/revocation/gnunet-service-revocation.c:434 +#: src/revocation/gnunet-service-revocation.c:504 +#, fuzzy +msgid "# revocation messages received via set union" +msgstr "# поруке ПОДАТАКА су примљене путем блутута" + +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "Грешка прорачуна уније скупа опозивања са %s\n" -#: src/revocation/gnunet-service-revocation.c:486 +#: src/revocation/gnunet-service-revocation.c:513 +#, fuzzy +msgid "# revocation set unions failed" +msgstr "# Бирање парњака није успело" + +#: src/revocation/gnunet-service-revocation.c:521 +#, fuzzy +msgid "# revocation set unions completed" +msgstr "# преноси расцепканости су завршени" + +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "Услуга ПОСТАВИ се урушила, окончавам услугу опозивања\n" -#: src/revocation/gnunet-service-revocation.c:812 +#: src/revocation/gnunet-service-revocation.c:912 msgid "Could not open revocation database file!" msgstr "Не могу да отворим датотеку базе података опозивања!" -#: src/scalarproduct/gnunet-scalarproduct.c:225 -msgid "You must specify at least one message ID to check!\n" -msgstr "Морате навести бар један ИБ поруке за проверу!\n" - -#: src/scalarproduct/gnunet-scalarproduct.c:232 -msgid "This program needs a session identifier for comparing vectors.\n" -msgstr "Овом програму је потребан одредник сесије за поређење вектора.\n" - -#: src/scalarproduct/gnunet-scalarproduct.c:239 -msgid "Please give a session key for --input_key!\n" -msgstr "Дајте кључ сесије за „--input_key“!\n" - -#: src/scalarproduct/gnunet-scalarproduct.c:251 -#, c-format -msgid "Tried to set initiator mode, as peer ID was given. However, `%s' is not a valid peer identifier.\n" -msgstr "Покушах да поставим режим покретача, јер је ИБ парњака био дат. Било како било, „%s“ није добар одредник парњака.\n" - -#: src/scalarproduct/gnunet-scalarproduct.c:278 -#: src/scalarproduct/gnunet-scalarproduct.c:314 -#, c-format -msgid "Could not convert `%s' to int32_t.\n" -msgstr "Не могу да претворим „%s“ у „int32_t“.\n" - -#: src/scalarproduct/gnunet-scalarproduct.c:286 -msgid "Need elements to compute the vectorproduct, got none.\n" -msgstr "Потребни су елементи за израчунавање производа вектора, нисам добио ниједан.\n" - -#: src/scalarproduct/gnunet-scalarproduct.c:346 -#, c-format -msgid "Could not convert `%s' to integer.\n" -msgstr "Не могу да претворим „%s“ у цео број.\n" - -#: src/scalarproduct/gnunet-scalarproduct.c:407 -msgid "A comma separated list of elements to compare as vector with our remote peer." -msgstr "Зарезом раздвојен списак елемената за поређење као вектора са нашим удаљеним парњаком." - -#: src/scalarproduct/gnunet-scalarproduct.c:410 -msgid "A comma separated mask to select which elements should actually be compared." -msgstr "Зарезом раздвојена маска за бирање који елементи заправо требају бити поређени." - -#: src/scalarproduct/gnunet-scalarproduct.c:413 -msgid "[Optional] peer to calculate our scalarproduct with. If this parameter is not given, the service will wait for a remote peer to compute the request." -msgstr "[Изборни] парњак са којим израчунавамо наш скаларни производ. Ако тај параметар није дат, услуга ће чекати да удаљени парњак прорачуна захтев." - -#: src/scalarproduct/gnunet-scalarproduct.c:416 -msgid "Transaction ID shared with peer." -msgstr "ИБ преноса дељеног са парњаком." - -#: src/scalarproduct/gnunet-scalarproduct.c:425 -msgid "Calculate the Vectorproduct with a GNUnet peer." -msgstr "Израчунава Производ вектора са ГНУнет парњаком." - -#: src/scalarproduct/gnunet-service-scalarproduct.c:541 -#, c-format -msgid "Client (%p) disconnected from us.\n" -msgstr "Прекинута је веза клијента (%p) са нама.\n" - -#: src/scalarproduct/gnunet-service-scalarproduct.c:613 -#: src/scalarproduct/gnunet-service-scalarproduct.c:702 -#, c-format -msgid "Could not send message to client (%p)!\n" -msgstr "Не могу да пошаљем поруку клијенту (%p)!\n" - -#: src/scalarproduct/gnunet-service-scalarproduct.c:619 -#, c-format -msgid "Sending session-end notification to client (%p) for session %s\n" -msgstr "Шаљем обавештење о крају сесије клијенту (%p) за сесију %s\n" - -#: src/scalarproduct/gnunet-service-scalarproduct.c:712 -#, c-format -msgid "Sent result to client (%p), this session (%s) has ended!\n" -msgstr "Резултати су послати клијенту (%p), ова сесија (%s) је завршена!\n" - -#: src/scalarproduct/gnunet-service-scalarproduct.c:766 -#: src/scalarproduct/gnunet-service-scalarproduct.c:855 -msgid "Could not send service-response message via mesh!)\n" -msgstr "Не могу да пошаљем поруку одговора услуге путем меша!)\n" - -#: src/scalarproduct/gnunet-service-scalarproduct.c:1028 -#, c-format -msgid "Failed to communicate with `%s', scalar product calculation aborted.\n" -msgstr "Нисам успео да разговарам са „%s“, прорачун скаларног производа је прекинут.\n" +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1099 -#: src/scalarproduct/gnunet-service-scalarproduct.c:1208 -msgid "Transmitting service request.\n" -msgstr "Одашиљем захтев услуге.\n" +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1108 -msgid "Could not send service-request multipart message to channel!\n" -msgstr "Не могу да пошаљем вишеделовну поруку захтева услуге каналу!\n" +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1147 -#, c-format -msgid "Successfully created new channel to peer (%s)!\n" -msgstr "Успешно је створен нови канал за парњака (%s)!\n" +#: src/rps/gnunet-rps-profiler.c:3200 +msgid "duration of the profiling" +msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1217 -msgid "Could not send message to channel!\n" -msgstr "Не могу да пошаљем поруку на канал!\n" +#: src/rps/gnunet-rps-profiler.c:3206 +#, fuzzy +msgid "timeout for the profiling" +msgstr "Наводи време истека за претраживање" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1274 -msgid "Too short message received from client!\n" -msgstr "Прекратка порука је примљена од клијента!\n" +#: src/rps/gnunet-rps-profiler.c:3211 +#, fuzzy +msgid "number of PeerIDs to request" +msgstr "број парњака у концензусу" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1287 -msgid "Invalid message received from client, session information incorrect!\n" -msgstr "Неисправна порука је примљена са клијента, подаци о сесији су нетачни!\n" +#: src/rps/gnunet-rps-profiler.c:3228 +#, fuzzy +msgid "Measure quality and performance of the RPS service." +msgstr "Мери квалитет и учинковитост НСЕ услуге." -#: src/scalarproduct/gnunet-service-scalarproduct.c:1298 -#, c-format -msgid "Duplicate session information received, cannot create new session with key `%s'\n" -msgstr "Двоструки подаци сесије су примљени, не могу да направим нову сесију са кључем „%s“\n" +#: src/scalarproduct/gnunet-scalarproduct.c:229 +msgid "You must specify at least one message ID to check!\n" +msgstr "Морате навести бар један ИБ поруке за проверу!\n" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1318 -#, c-format -msgid "Got client-request-session with key %s, preparing channel to remote service.\n" -msgstr "Добих сесију захтева клијента са кључем %s, припремам канал за удљену услугу.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:237 +msgid "This program needs a session identifier for comparing vectors.\n" +msgstr "Овом програму је потребан одредник сесије за поређење вектора.\n" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1354 +#: src/scalarproduct/gnunet-scalarproduct.c:250 #, c-format -msgid "Creating new channel for session with key %s.\n" -msgstr "Стварам нови канал за сесију са кључем „%s“.\n" +msgid "" +"Tried to set initiator mode, as peer ID was given. However, `%s' is not a " +"valid peer identifier.\n" +msgstr "" +"Покушах да поставим режим покретача, јер је ИБ парњака био дат. Било како " +"било, „%s“ није добар одредник парњака.\n" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1399 -#, c-format -msgid "Got client-responder-session with key %s and a matching service-request-session set, processing.\n" -msgstr "Добих сесију одговарача клијента са кључем %s и одговарајући скуп сесије захтева услуге, обрађујем.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:268 +#, fuzzy +msgid "Need elements to compute the scalarproduct, got none.\n" +msgstr "" +"Потребни су елементи за израчунавање производа вектора, нисам добио " +"ниједан.\n" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1409 -#, c-format -msgid "Got client-responder-session with key %s but NO matching service-request-session set, queuing element for later use.\n" -msgstr "Добих сесију одговарача клијента са кључем %s али НЕ и одговарајући скуп сесије захтева услуге, стављам елемент у ред за касније коришћење.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:291 +#, fuzzy, c-format +msgid "Malformed input, could not parse `%s'\n" +msgstr "Лоша политика прикључника „%s“\n" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1439 -#, c-format -msgid "New incoming channel from peer %s.\n" -msgstr "Нови долазни канал са парњака „%s“.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:309 +#, fuzzy, c-format +msgid "Could not convert `%s' to int64_t.\n" +msgstr "Не могу да претворим „%s“ у „int32_t“.\n" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1471 +#: src/scalarproduct/gnunet-scalarproduct.c:339 #, c-format -msgid "Peer disconnected, terminating session %s with peer (%s)\n" -msgstr "Веза са парњаком је прекинута, окончавам сесију %s са парњаком (%s)\n" +msgid "Failed to initiate computation, were all keys unique?\n" +msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct.c:1672 -#: src/scalarproduct/gnunet-service-scalarproduct.c:1814 -#, c-format -msgid "Got session with key %s and a matching element set, processing.\n" -msgstr "Добих сесију са кључем „%s“ и одговарајући скуп елемената, обрађујем.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:365 +#: src/scalarproduct/gnunet-scalarproduct.c:372 +msgid "" +"A comma separated list of elements to compare as vector with our remote peer." +msgstr "" +"Зарезом раздвојен списак елемената за поређење као вектора са нашим удаљеним " +"парњаком." -#: src/scalarproduct/gnunet-service-scalarproduct.c:1681 -#: src/scalarproduct/gnunet-service-scalarproduct.c:1821 -#, c-format -msgid "Got session with key %s without a matching element set, queueing.\n" -msgstr "Добих сесију са кључем „%s“ без одговарајућег скупа елемената, стављам у ред.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:379 +msgid "" +"[Optional] peer to calculate our scalarproduct with. If this parameter is " +"not given, the service will wait for a remote peer to compute the request." +msgstr "" +"[Изборни] парњак са којим израчунавамо наш скаларни производ. Ако тај " +"параметар није дат, услуга ће чекати да удаљени парњак прорачуна захтев." -#: src/scalarproduct/gnunet-service-scalarproduct.c:1771 -#, c-format -msgid "Got message with duplicate session key (`%s'), ignoring service request.\n" -msgstr "Добих поруку са двоструким кључем сесије („%s“), занемарујем захтев сесије.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:386 +msgid "Transaction ID shared with peer." +msgstr "ИБ преноса дељеног са парњаком." -#: src/scalarproduct/gnunet-service-scalarproduct.c:2014 -msgid "Shutting down, initiating cleanup.\n" -msgstr "Гасим, покрећем чишћење.\n" +#: src/scalarproduct/gnunet-scalarproduct.c:397 +msgid "Calculate the Vectorproduct with a GNUnet peer." +msgstr "Израчунава Производ вектора са ГНУнет парњаком." -#: src/scalarproduct/gnunet-service-scalarproduct.c:2100 -msgid "Connect to MESH failed\n" +#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 +#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 +#, fuzzy +msgid "Connect to CADET failed\n" msgstr "Повезивање са МЕШОМ није успело\n" -#: src/scalarproduct/gnunet-service-scalarproduct.c:2104 -msgid "Mesh initialized\n" -msgstr "Меш је покренут\n" - -#: src/scalarproduct/scalarproduct_api.c:246 -msgid "# SUC responder result messages received" -msgstr "# примљене су поруке резултата „SUC“ одговарача" - -#: src/scalarproduct/scalarproduct_api.c:300 -msgid "# bytes sent to scalarproduct" -msgstr "# бајтови су послати скаларном производу" - -#: src/scalarproduct/scalarproduct_api.c:345 -#: src/scalarproduct/scalarproduct_api.c:440 -msgid "Failed to connect to the scalarproduct service\n" -msgstr "Нисам успео да се повежем са услугом скаларног производа\n" - -#: src/scalarproduct/scalarproduct_api.c:353 -#: src/scalarproduct/scalarproduct_api.c:448 -msgid "Failed to send a message to the statistics service\n" -msgstr "Нисам успео да пошаљем поруку услузи статистике\n" - -#: src/scalarproduct/scalarproduct_api.c:387 -#: src/scalarproduct/scalarproduct_api.c:485 -msgid "Failed to send a message to the scalarproduct service\n" -msgstr "Нисам успео да пошаљем поруку услузи скаларног производа\n" +#: src/scalarproduct/scalarproduct_api.c:189 +msgid "Keys given to SCALARPRODUCT not unique!\n" +msgstr "" -#: src/secretsharing/gnunet-secretsharing-profiler.c:538 +#: src/secretsharing/gnunet-secretsharing-profiler.c:630 msgid "dkg start delay" msgstr "застој „dkg“ почетка" -#: src/secretsharing/gnunet-secretsharing-profiler.c:541 +#: src/secretsharing/gnunet-secretsharing-profiler.c:636 msgid "dkg timeout" msgstr "време истека „dkg“-а" -#: src/secretsharing/gnunet-secretsharing-profiler.c:544 +#: src/secretsharing/gnunet-secretsharing-profiler.c:642 msgid "threshold" msgstr "осетљивост" -#: src/secretsharing/gnunet-secretsharing-profiler.c:547 +#: src/secretsharing/gnunet-secretsharing-profiler.c:647 msgid "also profile decryption" msgstr "такође опис профила" -#: src/set/gnunet-service-set.c:1431 -msgid "Could not connect to mesh service\n" -msgstr "Не могу да се повежем са меш услугом\n" +#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 +#: src/setu/gnunet-service-setu.c:3633 +#, fuzzy +msgid "Could not connect to CADET service\n" +msgstr "Не могу да се повежем са „%s“ услугом!\n" -#: src/set/gnunet-set-ibf-profiler.c:221 +#: src/set/gnunet-set-ibf-profiler.c:268 +#: src/setu/gnunet-setu-ibf-profiler.c:268 msgid "number of element in set A-B" msgstr "број елемената у скупу A-B" -#: src/set/gnunet-set-ibf-profiler.c:224 +#: src/set/gnunet-set-ibf-profiler.c:274 +#: src/setu/gnunet-setu-ibf-profiler.c:274 msgid "number of element in set B-A" msgstr "број елемената у скупу B-A" -#: src/set/gnunet-set-ibf-profiler.c:227 +#: src/set/gnunet-set-ibf-profiler.c:281 +#: src/setu/gnunet-setu-ibf-profiler.c:281 msgid "number of common elements in A and B" msgstr "број заједничких елемената у A и B" -#: src/set/gnunet-set-ibf-profiler.c:230 +#: src/set/gnunet-set-ibf-profiler.c:287 +#: src/setu/gnunet-setu-ibf-profiler.c:287 msgid "hash num" msgstr "хеш број" -#: src/set/gnunet-set-ibf-profiler.c:233 +#: src/set/gnunet-set-ibf-profiler.c:293 +#: src/setu/gnunet-setu-ibf-profiler.c:293 msgid "ibf size" msgstr "„ibf“ величина" -#: src/set/gnunet-set-profiler.c:295 -msgid "oeration to execute" +#: src/set/gnunet-set-profiler.c:462 src/setu/gnunet-setu-profiler.c:453 +msgid "use byzantine mode" +msgstr "" + +#: src/set/gnunet-set-profiler.c:468 src/setu/gnunet-setu-profiler.c:459 +msgid "force sending full set" +msgstr "" + +#: src/set/gnunet-set-profiler.c:474 src/setu/gnunet-setu-profiler.c:465 +msgid "number delta operation" +msgstr "" + +#: src/set/gnunet-set-profiler.c:486 src/setu/gnunet-setu-profiler.c:477 +#, fuzzy +msgid "operation to execute" msgstr "операција за извршавање" -#: src/statistics/gnunet-service-statistics.c:280 +#: src/set/gnunet-set-profiler.c:492 src/seti/gnunet-seti-profiler.c:462 +#: src/setu/gnunet-setu-profiler.c:483 +#, fuzzy +msgid "element size" +msgstr "експеримент за коришћење" + +#: src/seti/gnunet-seti-profiler.c:457 +msgid "return intersection instead of delta" +msgstr "" + +#: src/sq/sq.c:54 #, c-format -msgid "Loading %llu bytes of statistics from `%s'\n" -msgstr "Учитавам %llu бајта статистике из „%s“\n" +msgid "Failure to bind %u-th SQL parameter\n" +msgstr "" + +#: src/sq/sq.c:61 +msgid "Failure in sqlite3_reset (!)\n" +msgstr "" + +#: src/sq/sq.c:139 +#, fuzzy, c-format +msgid "Failed to reset sqlite statement with error: %s\n" +msgstr "„%s“ није успело да реши метод '%s' са грешком: %s\n" -#: src/statistics/gnunet-service-statistics.c:346 +#: src/statistics/gnunet-service-statistics.c:319 #, c-format msgid "Wrote %llu bytes of statistics to `%s'\n" msgstr "Записујем %llu бајта статистике у „%s“\n" -#: src/statistics/gnunet-statistics.c:140 +#: src/statistics/gnunet-service-statistics.c:984 +#, c-format +msgid "Loading %llu bytes of statistics from `%s'\n" +msgstr "Учитавам %llu бајта статистике из „%s“\n" + +#: src/statistics/gnunet-statistics.c:413 +#: src/statistics/gnunet-statistics.c:455 msgid "Failed to obtain statistics.\n" msgstr "Нисам успео да добијем статистику.\n" -#: src/statistics/gnunet-statistics.c:142 +#: src/statistics/gnunet-statistics.c:416 +#: src/statistics/gnunet-statistics.c:458 #, c-format msgid "Failed to obtain statistics from host `%s:%llu'\n" msgstr "Нисам успео да добијем статистику од домаћина „%s:%llu“\n" -#: src/statistics/gnunet-statistics.c:189 +#: src/statistics/gnunet-statistics.c:532 msgid "Missing argument: subsystem \n" msgstr "Недостаје аргумент: подсистем \n" -#: src/statistics/gnunet-statistics.c:195 +#: src/statistics/gnunet-statistics.c:538 msgid "Missing argument: name\n" msgstr "Недостаје аргумент: назив\n" -#: src/statistics/gnunet-statistics.c:226 +#: src/statistics/gnunet-statistics.c:577 #, c-format msgid "No subsystem or name given\n" msgstr "Није дат подсистем или назив\n" -#: src/statistics/gnunet-statistics.c:234 +#: src/statistics/gnunet-statistics.c:589 #, c-format msgid "Failed to initialize watch routine\n" msgstr "Нисам успео да покренем рутину гледања\n" -#: src/statistics/gnunet-statistics.c:261 +#: src/statistics/gnunet-statistics.c:725 #, c-format -msgid "Trying to connect to remote host, but service `%s' is not running\n" -msgstr "Покушавам да се повежем са удаљеним домаћином, али услуга „%s“ није покренута\n" +msgid "Invalid argument `%s'\n" +msgstr "Неисправан аргумент „%s“\n" -#: src/statistics/gnunet-statistics.c:269 +#: src/statistics/gnunet-statistics.c:742 #, c-format msgid "A port is required to connect to host `%s'\n" msgstr "Потребан је прикључник за повезивање са домаћином „%s“\n" -#: src/statistics/gnunet-statistics.c:276 +#: src/statistics/gnunet-statistics.c:751 #, c-format msgid "A port has to be between 1 and 65535 to connect to host `%s'\n" -msgstr "Прикључник треба бити између 1 и 65535 за повезивање са домаћином „%s“\n" +msgstr "" +"Прикључник треба бити између 1 и 65535 за повезивање са домаћином „%s“\n" -#: src/statistics/gnunet-statistics.c:308 +#: src/statistics/gnunet-statistics.c:783 #, c-format -msgid "Invalid argument `%s'\n" -msgstr "Неисправан аргумент „%s“\n" +msgid "Not able to watch testbed nodes (yet - feel free to implement)\n" +msgstr "" -#: src/statistics/gnunet-statistics.c:334 +#: src/statistics/gnunet-statistics.c:816 msgid "limit output to statistics for the given NAME" msgstr "ограничава излаз на статистику за дати НАЗИВ" -#: src/statistics/gnunet-statistics.c:337 +#: src/statistics/gnunet-statistics.c:821 msgid "make the value being set persistent" msgstr "чини да вредност бива постављена трајном" -#: src/statistics/gnunet-statistics.c:340 +#: src/statistics/gnunet-statistics.c:827 msgid "limit output to the given SUBSYSTEM" msgstr "ограничава излаз на дати ПОДСИСТЕМ" -#: src/statistics/gnunet-statistics.c:343 +#: src/statistics/gnunet-statistics.c:832 +msgid "use as csv separator" +msgstr "" + +#: src/statistics/gnunet-statistics.c:838 +msgid "path to the folder containing the testbed data" +msgstr "" + +#: src/statistics/gnunet-statistics.c:843 msgid "just print the statistics value" msgstr "само исписује вредност статистике" -#: src/statistics/gnunet-statistics.c:346 +#: src/statistics/gnunet-statistics.c:847 msgid "watch value continuously" msgstr "гледа вредност непрекидно" -#: src/statistics/gnunet-statistics.c:349 +#: src/statistics/gnunet-statistics.c:852 msgid "connect to remote host" msgstr "повезује се са удаљеним домаћином" -#: src/statistics/gnunet-statistics.c:352 +#: src/statistics/gnunet-statistics.c:857 msgid "port for remote host" msgstr "прикључник за удаљеног домаћина" -#: src/statistics/gnunet-statistics.c:364 +#: src/statistics/gnunet-statistics.c:874 msgid "Print statistics about GNUnet operations." msgstr "Исписује статистику о ГНУнет радњама." -#: src/statistics/statistics_api.c:519 +#: src/statistics/statistics_api.c:749 msgid "Could not save some persistent statistics\n" msgstr "Не могу да сачувам нешто од трајне статистике\n" -#: src/statistics/statistics_api.c:1090 -msgid "Failed to receive acknowledgement from statistics service, some statistics might have been lost!\n" -msgstr "Нисам успео да примим потврду од услуге статистике, неке статистике могу бити изгубљене!\n" - -#: src/testbed/generate-underlay-topology.c:223 -msgid "Need atleast 2 arguments\n" +#: src/testbed/generate-underlay-topology.c:235 +#, fuzzy +msgid "Need at least 2 arguments\n" msgstr "Потребна су најмање 2 аргумента\n" -#: src/testbed/generate-underlay-topology.c:228 +#: src/testbed/generate-underlay-topology.c:240 msgid "Database filename missing\n" msgstr "Недостаје назив датотеке базе података\n" -#: src/testbed/generate-underlay-topology.c:235 +#: src/testbed/generate-underlay-topology.c:247 msgid "Topology string missing\n" msgstr "Ниска размештаја недостаје\n" -#: src/testbed/generate-underlay-topology.c:240 +#: src/testbed/generate-underlay-topology.c:252 #, c-format msgid "Invalid topology: %s\n" msgstr "Неисправан размештај: %s\n" -#: src/testbed/generate-underlay-topology.c:252 +#: src/testbed/generate-underlay-topology.c:265 #, c-format msgid "An argument is missing for given topology `%s'\n" msgstr "Недостаје аргумент за дати размештај „%s“\n" -#: src/testbed/generate-underlay-topology.c:258 +#: src/testbed/generate-underlay-topology.c:271 #, c-format msgid "Invalid argument `%s' given as topology argument\n" msgstr "Неисправан аргумент „%s“ је дат као аргумент размештаја\n" -#: src/testbed/generate-underlay-topology.c:266 +#: src/testbed/generate-underlay-topology.c:280 #, c-format msgid "Filename argument missing for topology `%s'\n" msgstr "Аргумент назива датотеке недостаје за размештај „%s“\n" -#: src/testbed/generate-underlay-topology.c:280 +#: src/testbed/generate-underlay-topology.c:295 #, c-format msgid "Second argument for topology `%s' is missing\n" msgstr "Други аргумент за размештај „%s“ недостаје\n" -#: src/testbed/generate-underlay-topology.c:286 +#: src/testbed/generate-underlay-topology.c:301 #, c-format msgid "Invalid argument `%s'; expecting unsigned int\n" msgstr "Неисправан аргумент „%s“; очекујем цео број без знака\n" -#: src/testbed/generate-underlay-topology.c:335 -#: src/testbed/gnunet-testbed-profiler.c:293 +#: src/testbed/generate-underlay-topology.c:366 +#: src/testbed/gnunet-testbed-profiler.c:284 msgid "create COUNT number of peers" msgstr "ствара УКУПНОСТ број парњака" -#: src/testbed/generate-underlay-topology.c:344 +#: src/testbed/generate-underlay-topology.c:379 msgid "" "Generates SQLite3 database representing a given underlay topology.\n" "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n" -"The following options are available for TOPO followed by TOPOOPTS if applicable:\n" +"The following options are available for TOPO followed by TOPOOPTS if " +"applicable:\n" "\t LINE\n" "\t RING\n" "\t RANDOM \n" @@ -5934,11 +6626,13 @@ msgid "" "\t cap: the maximum number of links a node can have\n" "\t m: the number of links a node should have while joining the network\n" "\t filename: the path of the file which contains topology information\n" -"NOTE: the format of the above file is descibed here: https://www.gnunet.org/content/topology-file-format\n" +"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" +"content/topology-file-format\n" msgstr "" "Ствара СКуЛајт3 базу података која представља дати основни размештај.\n" "Коришћење: gnunet-underlay-topology [ОПЦИЈЕ] db-filename TOPO [ТОПООПЦИЈЕ]\n" -"Следеће опције су доступне за „TOPO“ за којима следе ТОПООПЦИЈЕ ако су примењиве:\n" +"Следеће опције су доступне за „TOPO“ за којима следе ТОПООПЦИЈЕ ако су " +"примењиве:\n" "\t LINE\n" "\t RING\n" "\t RANDOM \n" @@ -5953,1689 +6647,2057 @@ msgstr "" "\t cap: највећи број веза које чвор може да има\n" "\t m: број веза које чвор треба да има приликом придруживања мрежи\n" "\t filename: путања датотеке која садржи податке о размештају\n" -"НАПОМЕНА: формат горе поменуте датотеке је описан овде: https://www.gnunet.org/content/topology-file-format\n" +"НАПОМЕНА: формат горе поменуте датотеке је описан овде: https://www.gnunet." +"org/content/topology-file-format\n" -#: src/testbed/gnunet-daemon-latency-logger.c:325 +#: src/testbed/gnunet-daemon-latency-logger.c:318 msgid "Daemon to log latency values of connections to neighbours" msgstr "Демон за дневничење вредности кашњења веза са суседима" -#: src/testbed/gnunet-daemon-testbed-blacklist.c:264 -msgid "Daemon to restrict incoming transport layer connections during testbed deployments" -msgstr "Демон за ограничење долазних веза слоја преноса за време примене пробног места" +#: src/testbed/gnunet-daemon-testbed-blacklist.c:250 +msgid "" +"Daemon to restrict incoming transport layer connections during testbed " +"deployments" +msgstr "" +"Демон за ограничење долазних веза слоја преноса за време примене пробног " +"места" -#: src/testbed/gnunet-daemon-testbed-underlay.c:235 src/testing/list-keys.c:50 -#: src/testing/testing.c:293 src/util/gnunet-ecc.c:217 +#: src/testbed/gnunet-daemon-testbed-underlay.c:234 src/testing/list-keys.c:47 +#: src/testing/testing.c:278 src/util/gnunet-ecc.c:318 #, c-format msgid "Incorrect hostkey file format: %s\n" msgstr "Нетачан формат датотеке кључа домаћина: %s\n" -#: src/testbed/gnunet-daemon-testbed-underlay.c:474 +#: src/testbed/gnunet-daemon-testbed-underlay.c:477 msgid "Daemon to restrict underlay network in testbed deployments" msgstr "Демон за ограничење основне мреже у применама пробног места" -#: src/testbed/gnunet-service-testbed_cpustatus.c:730 +#: src/testbed/gnunet-service-testbed_cpustatus.c:618 +#, c-format +msgid "" +"Cannot open %s for writing load statistics. Not logging load statistics\n" +msgstr "" +"Не могу да отворим „%s“ за писање статистике учитавања. Не записујем у " +"дневник статистику учитавања\n" + +#: src/testbed/gnunet-service-testbed_peers.c:1165 +#, c-format +msgid "%s is stopped" +msgstr "„%s“ је заустављен" + +#: src/testbed/gnunet-service-testbed_peers.c:1168 +#, c-format +msgid "%s is starting" +msgstr "„%s“ се покреће" + +#: src/testbed/gnunet-service-testbed_peers.c:1171 +#, c-format +msgid "%s is stopping" +msgstr "„%s“ се зауставља" + +#: src/testbed/gnunet-service-testbed_peers.c:1174 +#, c-format +msgid "%s is starting already" +msgstr "„%s“ се већ покреће" + +#: src/testbed/gnunet-service-testbed_peers.c:1177 #, c-format -msgid "Cannot open %s for writing load statistics. Not logging load statistics\n" -msgstr "Не могу да отворим „%s“ за писање статистике учитавања. Не записујем у дневник статистику учитавања\n" +msgid "%s is stopping already" +msgstr "„%s“ се већ зауставља" + +#: src/testbed/gnunet-service-testbed_peers.c:1180 +#, c-format +msgid "%s is started already" +msgstr "„%s“ је већ покренут" + +#: src/testbed/gnunet-service-testbed_peers.c:1183 +#, c-format +msgid "%s is stopped already" +msgstr "„%s“ је већ заустављен" -#: src/testbed/gnunet-service-testbed_peers.c:1015 -msgid "Misconfiguration (can't connect to the ARM service)" -msgstr "Лоше подешавање (не могу да се повежем на АУР услугу)" +#: src/testbed/gnunet-service-testbed_peers.c:1186 +#, c-format +msgid "%s service is not known to ARM" +msgstr "„%s“ услуга није позната АУР-у" -#: src/testbed/gnunet-service-testbed_peers.c:1021 -msgid "Request doesn't fit into a message" -msgstr "Захтев не стаје у поруку" +#: src/testbed/gnunet-service-testbed_peers.c:1189 +#, c-format +msgid "%s service failed to start" +msgstr "„%s“ услуга није успела да се покрене" -#: src/testbed/gnunet-service-testbed_peers.c:1059 +#: src/testbed/gnunet-service-testbed_peers.c:1192 #, c-format msgid "%s service can't be started because ARM is shutting down" msgstr "„%s“ услуга се не може покренути јер се АУР гаси" -#: src/testbed/gnunet_testbed_mpi_spawn.c:125 +#: src/testbed/gnunet-service-testbed_peers.c:1194 +#, c-format +msgid "%.s Unknown result code." +msgstr "%.s Непознат код резултата." + +#: src/testbed/gnunet_testbed_mpi_spawn.c:119 msgid "Waiting for child to exit.\n" msgstr "Чекам на пород да изађе.\n" -#: src/testbed/gnunet_testbed_mpi_spawn.c:247 +#: src/testbed/gnunet_testbed_mpi_spawn.c:242 #, c-format msgid "Spawning process `%s'\n" msgstr "Умножавам процес „%s“\n" -#: src/testbed/gnunet-testbed-profiler.c:267 -#, c-format -msgid "Exiting as the number of peers is %u\n" -msgstr "Излазим јер је број парњака %u\n" - -#: src/testbed/gnunet-testbed-profiler.c:296 +#: src/testbed/gnunet-testbed-profiler.c:290 msgid "tolerate COUNT number of continious timeout failures" msgstr "толерише УКУПНО број непрекидних неуспеха истека времена" -#: src/testbed/gnunet-testbed-profiler.c:299 -msgid "run profiler in non-interactive mode where upon testbed setup the profiler does not wait for a keystroke but continues to run until a termination signal is received" -msgstr "покреће профајлера у не-дејственом режиму у коме над поставком пробног места профајлер не чека на притисак тастера већ наставља да ради све док се не прими сигнал окончања" +#: src/testbed/gnunet-testbed-profiler.c:295 +msgid "" +"run profiler in non-interactive mode where upon testbed setup the profiler " +"does not wait for a keystroke but continues to run until a termination " +"signal is received" +msgstr "" +"покреће профајлера у не-дејственом режиму у коме над поставком пробног места " +"профајлер не чека на притисак тастера већ наставља да ради све док се не " +"прими сигнал окончања" + +#: src/testbed/testbed_api.c:399 +#, c-format +msgid "Adding host %u failed with error: %s\n" +msgstr "Додавање домаћина %u није успело са грешком: %s\n" -#: src/testbed/testbed_api_hosts.c:415 +#: src/testbed/testbed_api_hosts.c:429 #, c-format msgid "Hosts file %s not found\n" msgstr "Нисам нашао датотеку домаћина „%s“\n" -#: src/testbed/testbed_api_hosts.c:423 +#: src/testbed/testbed_api_hosts.c:438 #, c-format msgid "Hosts file %s has no data\n" msgstr "Датотека домаћина „%s“ нема података\n" -#: src/testbed/testbed_api_hosts.c:430 +#: src/testbed/testbed_api_hosts.c:447 #, c-format msgid "Hosts file %s cannot be read\n" msgstr "Не могу да прочитам датотеку домаћина „%s“\n" -#: src/testbed/testbed_api_hosts.c:570 +#: src/testbed/testbed_api_hosts.c:589 #, c-format msgid "The function %s is only available when compiled with (--with-ll)\n" msgstr "Функција „%s“ је доступна само када је преведена са (--with-ll)\n" -#: src/testbed/testbed_api_hosts.c:1586 -#, c-format -msgid "Adding host %u failed with error: %s\n" -msgstr "Додавање домаћина %u није успело са грешком: %s\n" - -#: src/testbed/testbed_api_testbed.c:819 +#: src/testbed/testbed_api_testbed.c:822 msgid "Linking controllers failed. Exiting" msgstr "Повезивање контролера није успело. Излазим" -#: src/testbed/testbed_api_testbed.c:988 +#: src/testbed/testbed_api_testbed.c:999 #, c-format msgid "Host registration failed for a host. Error: %s\n" msgstr "Регистрација домаћина није успела за домаћина. Грешка: %s\n" -#: src/testbed/testbed_api_testbed.c:1054 +#: src/testbed/testbed_api_testbed.c:1065 msgid "Controller crash detected. Shutting down.\n" msgstr "Урушавање контролера је откривено. Гасим се.\n" -#: src/testbed/testbed_api_testbed.c:1143 +#: src/testbed/testbed_api_testbed.c:1154 #, c-format msgid "Host %s cannot start testbed\n" msgstr "Домаћин „%s“ не може да покрене пробно место\n" -#: src/testbed/testbed_api_testbed.c:1147 +#: src/testbed/testbed_api_testbed.c:1158 msgid "Testbed cannot be started on localhost\n" msgstr "Пробно место се не може покренути на локалном домаћину\n" -#: src/testbed/testbed_api_testbed.c:1185 +#: src/testbed/testbed_api_testbed.c:1196 msgid "Cannot start the master controller" msgstr "Не могу да покренем главног контролора" -#: src/testbed/testbed_api_testbed.c:1203 +#: src/testbed/testbed_api_testbed.c:1214 msgid "Shutting down testbed due to timeout while setup.\n" msgstr "Гасим пробно место због истека времена приликом подешавања.\n" -#: src/testbed/testbed_api_testbed.c:1263 +#: src/testbed/testbed_api_testbed.c:1274 msgid "No hosts loaded from LoadLeveler. Need at least one host\n" -msgstr "Ниједан домаћин није учитан из „LoadLeveler“-а. Потребан је барем један домаћин\n" +msgstr "" +"Ниједан домаћин није учитан из „LoadLeveler“-а. Потребан је барем један " +"домаћин\n" -#: src/testbed/testbed_api_testbed.c:1275 +#: src/testbed/testbed_api_testbed.c:1286 msgid "No hosts loaded. Need at least one host\n" msgstr "Ниједан домаћин није учитан. Потребан је барем један домаћин\n" -#: src/testbed/testbed_api_testbed.c:1299 +#: src/testbed/testbed_api_testbed.c:1312 msgid "Specified topology must be supported by testbed" msgstr "Наведени размештај мора бити подржан пробним местом" -#: src/testbed/testbed_api_testbed.c:1349 +#: src/testbed/testbed_api_testbed.c:1368 #, c-format -msgid "Maximum number of edges a peer can have in a scale free topology cannot be more than %u. Given `%s = %llu'" -msgstr "Највећи број ивица које парњак може имати у слободном размештају лествице не може бити већи од %u. Дато је „%s = %llu“" +msgid "" +"Maximum number of edges a peer can have in a scale free topology cannot be " +"more than %u. Given `%s = %llu'" +msgstr "" +"Највећи број ивица које парњак може имати у слободном размештају лествице не " +"може бити већи од %u. Дато је „%s = %llu“" -#: src/testbed/testbed_api_testbed.c:1365 +#: src/testbed/testbed_api_testbed.c:1385 #, c-format -msgid "The number of edges that can established when adding a new node to scale free topology cannot be more than %u. Given `%s = %llu'" -msgstr "Број ивица које се могу успоставити приликом додавања новог чвора у слободном размештају лествице не може бити већи од %u. Дато је „%s = %llu“" +msgid "" +"The number of edges that can established when adding a new node to scale " +"free topology cannot be more than %u. Given `%s = %llu'" +msgstr "" +"Број ивица које се могу успоставити приликом додавања новог чвора у " +"слободном размештају лествице не може бити већи од %u. Дато је „%s = %llu“" -#: src/testbed/testbed_api_topology.c:960 +#: src/testbed/testbed_api_topology.c:1033 #, c-format msgid "Topology file %s not found\n" msgstr "Нисам нашао датотеку размештаја „%s“\n" -#: src/testbed/testbed_api_topology.c:966 +#: src/testbed/testbed_api_topology.c:1041 #, c-format msgid "Topology file %s has no data\n" msgstr "Датотека размештаја „%s“ нема података\n" -#: src/testbed/testbed_api_topology.c:973 +#: src/testbed/testbed_api_topology.c:1049 #, c-format msgid "Topology file %s cannot be read\n" msgstr "Не могу да прочитам датотеку размештаја „%s“\n" -#: src/testbed/testbed_api_topology.c:995 +#: src/testbed/testbed_api_topology.c:1071 #, c-format msgid "Failed to read peer index from toology file: %s" msgstr "Нисам успео да прочитам индекс парњака из датотеке размештаја: %s" -#: src/testbed/testbed_api_topology.c:1004 -#: src/testbed/testbed_api_topology.c:1028 +#: src/testbed/testbed_api_topology.c:1080 +#: src/testbed/testbed_api_topology.c:1105 #, c-format msgid "Value in given topology file: %s out of range\n" msgstr "Вредност у датој датотеци размештаја: „%s“ је ван опсега\n" -#: src/testbed/testbed_api_topology.c:1010 -#: src/testbed/testbed_api_topology.c:1034 +#: src/testbed/testbed_api_topology.c:1086 +#: src/testbed/testbed_api_topology.c:1111 #, c-format msgid "Failed to read peer index from topology file: %s" msgstr "Нисам успео да прочитам индекс парњака из датотеке размештаја: %s" -#: src/testbed/testbed_api_topology.c:1016 -#: src/testbed/testbed_api_topology.c:1040 +#: src/testbed/testbed_api_topology.c:1092 +#: src/testbed/testbed_api_topology.c:1117 msgid "Topology file needs more peers than given ones\n" msgstr "Датотеци размештаја је потребно више парњака од једног датог\n" -#: src/testbed/testbed_api_topology.c:1074 -#, c-format -msgid "Ignoring to connect peer %u to peer %u\n" +#: src/testbed/testbed_api_topology.c:1153 +#, fuzzy, c-format +msgid "Ignoring to connect peer %lu to peer %lu\n" msgstr "Занемарујем да повежем парњака %u са парњаком %u\n" -#: src/testing/gnunet-testing.c:173 +#: src/testing/gnunet-testing.c:185 #, c-format msgid "Could not extract hostkey %u (offset too large?)\n" msgstr "Не могу да извучем кључ домаћина %u (померај је превелик?)\n" -#: src/testing/gnunet-testing.c:258 +#: src/testing/gnunet-testing.c:275 #, c-format msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n" -msgstr "Непозната наредба, користите „q“ да прекинете или „r“ да поново покренете парњака\n" +msgstr "" +"Непозната наредба, користите „q“ да прекинете или „r“ да поново покренете " +"парњака\n" -#: src/testing/gnunet-testing.c:355 +#: src/testing/gnunet-testing.c:386 msgid "create unique configuration files" msgstr "ствара јединствене датотеке подешавања" -#: src/testing/gnunet-testing.c:357 +#: src/testing/gnunet-testing.c:392 msgid "extract hostkey file from pre-computed hostkey list" -msgstr "извлачи датотеку кључа доамћина из унапред прорачунатог списка кључа домаћина" +msgstr "" +"извлачи датотеку кључа доамћина из унапред прорачунатог списка кључа домаћина" -#: src/testing/gnunet-testing.c:359 -msgid "number of unique configuration files to create, or number of the hostkey to extract" -msgstr "број јединствених датотека подешавања за стварање, или број кључа домаћина за извлачење" +#: src/testing/gnunet-testing.c:400 +msgid "" +"number of unique configuration files to create, or number of the hostkey to " +"extract" +msgstr "" +"број јединствених датотека подешавања за стварање, или број кључа домаћина " +"за извлачење" -#: src/testing/gnunet-testing.c:361 +#: src/testing/gnunet-testing.c:407 msgid "configuration template" msgstr "шаблон подешавања" -#: src/testing/gnunet-testing.c:363 +#: src/testing/gnunet-testing.c:415 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)" -msgstr "покреће дату услугу, чека на стандардном улазу за „r“ (поновно покретање) или „q“ (излази)" +msgstr "" +"покреће дату услугу, чека на стандардном улазу за „r“ (поновно покретање) " +"или „q“ (излази)" -#: src/testing/gnunet-testing.c:376 +#: src/testing/gnunet-testing.c:432 msgid "Command line tool to access the testing library" msgstr "Алат линије наредби за приезуп библиотеци тестирања" -#: src/testing/list-keys.c:90 +#: src/testing/list-keys.c:92 msgid "list COUNT number of keys" msgstr "исписује УКУПНОСТ број парњака" -#: src/testing/list-keys.c:93 -msgid "skip COUNT number of keys in the beginning" -msgstr "прескаче УКУПНОСТ број кључева на почетку" - -#: src/testing/testing.c:277 +#: src/testing/testing.c:261 #, c-format msgid "Hostkeys file not found: %s\n" msgstr "Нисам нашао датотеку кључева домаћина: %s\n" -#: src/testing/testing.c:718 +#: src/testing/testing.c:714 #, c-format msgid "Key number %u does not exist\n" msgstr "Број кључа %u не постоји\n" -#: src/testing/testing.c:1157 +#: src/testing/testing.c:1188 #, c-format -msgid "You attempted to create a testbed with more than %u hosts. Please precompute more hostkeys first.\n" -msgstr "Покушали сте да направите пробно место са више од %u домаћина. Прво пре свега израчунајте више кључева домаћина.\n" +msgid "" +"You attempted to create a testbed with more than %u hosts. Please " +"precompute more hostkeys first.\n" +msgstr "" +"Покушали сте да направите пробно место са више од %u домаћина. Прво пре " +"свега израчунајте више кључева домаћина.\n" -#: src/testing/testing.c:1166 +#: src/testing/testing.c:1197 #, c-format msgid "Failed to initialize hostkey for peer %u\n" msgstr "Нисам успео да покренем кључ домаћина за парњака %u\n" -#: src/testing/testing.c:1176 +#: src/testing/testing.c:1207 msgid "PRIVATE_KEY option in PEER section missing in configuration\n" msgstr "опција „PRIVATE_KEY“ у одељку „PEER“ недостаје у подешавањима\n" -#: src/testing/testing.c:1189 +#: src/testing/testing.c:1220 msgid "Failed to create configuration for peer (not enough free ports?)\n" -msgstr "Нисам успео да направим подешавање за парњака (нема довољно слободних прикључника?)\n" +msgstr "" +"Нисам успео да направим подешавање за парњака (нема довољно слободних " +"прикључника?)\n" -#: src/testing/testing.c:1203 +#: src/testing/testing.c:1236 #, c-format msgid "Cannot open hostkey file `%s': %s\n" msgstr "Не могу да отворим датотеку кључа домаћина „%s“: %s\n" -#: src/testing/testing.c:1215 +#: src/testing/testing.c:1250 #, c-format msgid "Failed to write hostkey file for peer %u: %s\n" msgstr "Нисам успео да запишем датотеку кључа домаћина за парњака %u: %s\n" -#: src/testing/testing.c:1240 +#: src/testing/testing.c:1278 #, c-format msgid "Failed to write configuration file `%s' for peer %u: %s\n" msgstr "Нисам успео да запишем датотеку подешавања „%s“ за парњака %u: %s\n" -#: src/testing/testing.c:1342 +#: src/testing/testing.c:1384 #, c-format msgid "Failed to start `%s': %s\n" msgstr "Нисам успео да покренем „%s“: %s\n" -#: src/testing/testing.c:1706 +#: src/testing/testing.c:1683 #, c-format msgid "Failed to load configuration from %s\n" msgstr "Нисам успео да учитам подешавање за „%s“\n" -#: src/topology/friends.c:100 +#: src/topology/friends.c:127 #, c-format msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n" -msgstr "Грешка синтаксе у датотеци „FRIENDS“ на померају %llu, прескачем бајтове „%.*s“.\n" +msgstr "" +"Грешка синтаксе у датотеци „FRIENDS“ на померају %llu, прескачем бајтове " +"„%.*s“.\n" -#: src/topology/friends.c:154 +#: src/topology/friends.c:181 #, c-format msgid "Directory for file `%s' does not seem to be writable.\n" msgstr "Директоријум за датотеку „%s“ не изгледа да је уписив.\n" -#: src/topology/gnunet-daemon-topology.c:255 +#: src/topology/gnunet-daemon-topology.c:228 msgid "# peers blacklisted" msgstr "# парњаци су стављени на списак забрана" -#: src/topology/gnunet-daemon-topology.c:388 -msgid "# connect requests issued to transport" +#: src/topology/gnunet-daemon-topology.c:334 +#, fuzzy +msgid "# connect requests issued to ATS" msgstr "# захтеви везе су издати преносу" -#: src/topology/gnunet-daemon-topology.c:728 -#: src/topology/gnunet-daemon-topology.c:813 +#: src/topology/gnunet-daemon-topology.c:511 +msgid "# HELLO messages gossipped" +msgstr "# „HELLO“ поруке су наклопљене" + +#: src/topology/gnunet-daemon-topology.c:598 +#: src/topology/gnunet-daemon-topology.c:678 msgid "# friends connected" msgstr "# пријатељи су повезани" -#: src/topology/gnunet-daemon-topology.c:993 +#: src/topology/gnunet-daemon-topology.c:849 msgid "Failed to connect to core service, can not manage topology!\n" -msgstr "Нисам успео да се повежем са услугом језгра, не могу да радим размештајем!\n" +msgstr "" +"Нисам успео да се повежем са услугом језгра, не могу да радим размештајем!\n" -#: src/topology/gnunet-daemon-topology.c:1022 +#: src/topology/gnunet-daemon-topology.c:875 #, c-format msgid "Found myself `%s' in friend list (useless, ignored)\n" msgstr "Нађох себе „%s“ на списку пријатеља (некорисно, занемарујем)\n" -#: src/topology/gnunet-daemon-topology.c:1029 +#: src/topology/gnunet-daemon-topology.c:882 #, c-format msgid "Found friend `%s' in configuration\n" msgstr "Нађох пријатеља „%s“ у подешавањима\n" -#: src/topology/gnunet-daemon-topology.c:1050 +#: src/topology/gnunet-daemon-topology.c:900 msgid "Encountered errors parsing friends list!\n" msgstr "Наиђох на грешке током обраде списка пријатеља!\n" -#: src/topology/gnunet-daemon-topology.c:1052 +#: src/topology/gnunet-daemon-topology.c:903 msgid "# friends in configuration" msgstr "# пријатељи у подешавањима" -#: src/topology/gnunet-daemon-topology.c:1057 -msgid "Fewer friends specified than required by minimum friend count. Will only connect to friends.\n" -msgstr "Наведено је мање пријатеља него што се захтева најмањим бројем пријатеља. Повезаћу се само са пријатељима.\n" +#: src/topology/gnunet-daemon-topology.c:911 +msgid "" +"Fewer friends specified than required by minimum friend count. Will only " +"connect to friends.\n" +msgstr "" +"Наведено је мање пријатеља него што се захтева најмањим бројем пријатеља. " +"Повезаћу се само са пријатељима.\n" -#: src/topology/gnunet-daemon-topology.c:1063 -msgid "More friendly connections required than target total number of connections.\n" +#: src/topology/gnunet-daemon-topology.c:919 +msgid "" +"More friendly connections required than target total number of connections.\n" msgstr "Захтевано је више пријатељских веза него циљни укупан број веза.\n" -#: src/topology/gnunet-daemon-topology.c:1094 +#: src/topology/gnunet-daemon-topology.c:966 +#: src/transport/plugin_transport_wlan.c:1521 msgid "# HELLO messages received" msgstr "# „HELLO“ поруке су примљене" -#: src/topology/gnunet-daemon-topology.c:1151 -msgid "# HELLO messages gossipped" -msgstr "# „HELLO“ поруке су наклопљене" +#: src/topology/gnunet-daemon-topology.c:1127 +msgid "GNUnet topology control" +msgstr "" -#: src/topology/gnunet-daemon-topology.c:1290 -msgid "GNUnet topology control (maintaining P2P mesh and F2F constraints)" -msgstr "Контрола ГНУнет размештаја (задржавајући П2П меш и Ф2Ф ограничења)" +#: src/transport/gnunet-communicator-tcp.c:3221 +#: src/transport/gnunet-communicator-udp.c:3076 +#: src/transport/gnunet-service-tng.c:10014 +#: src/transport/gnunet-service-transport.c:2626 +msgid "Transport service is lacking key configuration settings. Exiting.\n" +msgstr "Услузи преноса недостају поставке подешавања кључа. Излазим.\n" -#: src/transport/gnunet-service-transport_blacklist.c:271 -#, c-format -msgid "Adding blacklisting entry for peer `%s'\n" -msgstr "Додајем унос списка забрана за парњака „%s“\n" +#: src/transport/gnunet-communicator-tcp.c:3553 +msgid "GNUnet TCP communicator" +msgstr "" + +#: src/transport/gnunet-communicator-udp.c:3148 +msgid "GNUnet UDP communicator" +msgstr "" + +#: src/transport/gnunet-communicator-unix.c:789 +#, fuzzy +msgid "" +"Maximum number of UNIX connections exceeded, dropping incoming message\n" +msgstr "Највећи број веза је %u\n" + +#: src/transport/gnunet-communicator-unix.c:1016 +#, fuzzy +msgid "UNIX communicator is lacking key configuration settings. Exiting.\n" +msgstr "„%s“ услузи недостају поставке подешавања кључа (%s). Излазим.\n" -#: src/transport/gnunet-service-transport_blacklist.c:279 +#: src/transport/gnunet-communicator-unix.c:1061 +#: src/transport/plugin_transport_unix.c:1383 #, c-format -msgid "Adding blacklisting entry for peer `%s':`%s'\n" -msgstr "Додајем унос списка забрана за парњака „%s“:„%s“\n" +msgid "Cannot create path to `%s'\n" +msgstr "Не могу да направим путању до „%s“\n" -#: src/transport/gnunet-service-transport_blacklist.c:464 -#: src/transport/gnunet-service-transport_blacklist.c:745 -msgid "# disconnects due to blacklist" -msgstr "# прекиди везе због списка забрана" +#: src/transport/gnunet-communicator-unix.c:1139 +msgid "GNUnet UNIX domain socket communicator" +msgstr "" -#: src/transport/gnunet-service-transport.c:220 +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + +#: src/transport/gnunet-service-transport.c:445 +msgid "# messages dropped due to slow client" +msgstr "# поруке су одбачене услед спорог клијента" + +#: src/transport/gnunet-service-transport.c:796 +msgid "# bytes payload dropped (other peer was not connected)" +msgstr "# утовар бајтова је одбачен (други парњак није повезан)" + +#: src/transport/gnunet-service-transport.c:1479 msgid "# bytes payload discarded due to not connected peer" msgstr "# бајтови утовара су одбачени због не повезаног парњака" -#: src/transport/gnunet-service-transport.c:424 +#: src/transport/gnunet-service-transport.c:1624 msgid "# bytes total received" msgstr "# укупно бајтова је примљено" -#: src/transport/gnunet-service-transport.c:515 +#: src/transport/gnunet-service-transport.c:1714 msgid "# bytes payload received" msgstr "# бајтови утовара су примљени" -#: src/transport/gnunet-service-transport.c:686 -#, c-format -msgid "Could not obtain a valid network for `%s' %s (%s)\n" -msgstr "Не могу да добијем исправну везу за „%s“ %s (%s)\n" - -#: src/transport/gnunet-service-transport.c:733 -#, c-format -msgid "Address or session unknown: failed to update properties for peer `%s' plugin `%s' address `%s' session %p\n" -msgstr "Адреса или сесија је непозната: нисам успео да својства за парњака „%s“ прикључак „%s“ адресу „%s“ сесију %p\n" +#: src/transport/gnunet-service-transport.c:2018 +#: src/transport/gnunet-service-transport.c:2452 +msgid "# disconnects due to blacklist" +msgstr "# прекиди везе због списка забрана" -#: src/transport/gnunet-service-transport.c:1084 -msgid "Transport service is lacking key configuration settings. Exiting.\n" -msgstr "Услузи преноса недостају поставке подешавања кључа. Излазим.\n" +#: src/transport/gnunet-service-transport.c:2456 +#, fuzzy, c-format +msgid "Disallowing connection to peer `%s' on transport %s\n" +msgstr "Недостаје функција „%s“ у прикључку преноса за „%s“\n" -#: src/transport/gnunet-service-transport_clients.c:432 +#: src/transport/gnunet-service-transport.c:2551 #, c-format -msgid "Dropping message of type %u and size %u, have %u/%u messages pending\n" -msgstr "Одбацујем поруку врсте %u и величине %u, има %u/%u порука на чекању\n" - -#: src/transport/gnunet-service-transport_clients.c:439 -msgid "# messages dropped due to slow client" -msgstr "# поруке су одбачене услед спорог клијента" - -#: src/transport/gnunet-service-transport_clients.c:596 -#, c-format -msgid "Rejecting control connection from peer `%s', which is not me!\n" -msgstr "Одбацујем контролну везу од парњака „%s“, а то нисам ја!\n" - -#: src/transport/gnunet-service-transport_clients.c:737 -msgid "# bytes payload dropped (other peer was not connected)" -msgstr "# утовар бајтова је одбачен (други парњак није повезан)" - -#: src/transport/gnunet-service-transport_clients.c:770 -#, c-format -msgid "Blacklist refuses connection attempt to peer `%s'\n" -msgstr "Списак забрана одбацује покушај повезивања са парњаком „%s“\n" - -#: src/transport/gnunet-service-transport_clients.c:776 -#, c-format -msgid "Blacklist allows connection attempt to peer `%s'\n" -msgstr "Списак забрана дозвољава покушај повезивања са парњаком „%s“\n" - -#: src/transport/gnunet-service-transport_clients.c:801 -msgid "# REQUEST CONNECT messages received" -msgstr "# ЗАХТЕВАЈ ПОВЕЖИ_СЕ поруке су примљене" - -#: src/transport/gnunet-service-transport_clients.c:815 -#, c-format -msgid "Received a request connect message for peer `%s'\n" -msgstr "Примих поруку захтева повезивања за парњака „%s“\n" - -#: src/transport/gnunet-service-transport_clients.c:826 -msgid "# REQUEST DISCONNECT messages received" -msgstr "# ЗАХТЕВАЈ ПРЕКИНИ_ВЕЗУ поруке су примљене" +msgid "Adding blacklisting entry for peer `%s'\n" +msgstr "Додајем унос списка забрана за парњака „%s“\n" -#: src/transport/gnunet-service-transport_clients.c:840 +#: src/transport/gnunet-service-transport.c:2560 #, c-format -msgid "Received a request disconnect message for peer `%s'\n" -msgstr "Примих поруку захтева прекида везе за парњака „%s“\n" +msgid "Adding blacklisting entry for peer `%s':`%s'\n" +msgstr "Додајем унос списка забрана за парњака „%s“:„%s“\n" -#: src/transport/gnunet-service-transport_hello.c:181 +#: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "# освежих мој „HELLO“" -#: src/transport/gnunet-service-transport_neighbours.c:1095 +#: src/transport/gnunet-service-transport_neighbours.c:808 +#, fuzzy +msgid "# session creation failed" +msgstr "# Бирање парњака није успело" + +#: src/transport/gnunet-service-transport_neighbours.c:1061 msgid "# DISCONNECT messages sent" msgstr "# ПРЕКИНИ_ВЕЗУ поруке су послате" -#: src/transport/gnunet-service-transport_neighbours.c:1220 -#: src/transport/gnunet-service-transport_neighbours.c:1629 +#: src/transport/gnunet-service-transport_neighbours.c:1192 +msgid "# disconnects due to quota of 0" +msgstr "# прекиди везе због квоте 0" + +#: src/transport/gnunet-service-transport_neighbours.c:1341 +#: src/transport/gnunet-service-transport_neighbours.c:1817 msgid "# bytes in message queue for other peers" msgstr "# бајтови у реду поруке за друге парњаке" -#: src/transport/gnunet-service-transport_neighbours.c:1225 +#: src/transport/gnunet-service-transport_neighbours.c:1347 msgid "# messages transmitted to other peers" msgstr "# поруке су пренесене другим парњацима" -#: src/transport/gnunet-service-transport_neighbours.c:1230 +#: src/transport/gnunet-service-transport_neighbours.c:1354 msgid "# transmission failures for messages to other peers" msgstr "# неуспеси преноса за поруке ка другим парњацима" -#: src/transport/gnunet-service-transport_neighbours.c:1287 +#: src/transport/gnunet-service-transport_neighbours.c:1415 msgid "# messages timed out while in transport queue" msgstr "# истекло је време порукама док су у реду преноса" -#: src/transport/gnunet-service-transport_neighbours.c:1343 -msgid "# keepalives sent" -msgstr "# одржавања у раду су послата" +#: src/transport/gnunet-service-transport_neighbours.c:1499 +msgid "# KEEPALIVES sent" +msgstr "" -#: src/transport/gnunet-service-transport_neighbours.c:1376 +#: src/transport/gnunet-service-transport_neighbours.c:1535 msgid "# KEEPALIVE messages discarded (peer unknown)" msgstr "# ОДРЖИ_У_РАДУ поруке су одбачене (парњак није познат)" -#: src/transport/gnunet-service-transport_neighbours.c:1384 +#: src/transport/gnunet-service-transport_neighbours.c:1543 msgid "# KEEPALIVE messages discarded (no session)" msgstr "# ОДРЖИ_У_РАДУ поруке су одбачене (нема сесије)" -#: src/transport/gnunet-service-transport_neighbours.c:1431 -msgid "# KEEPALIVE_RESPONSE messages discarded (not connected)" +#: src/transport/gnunet-service-transport_neighbours.c:1554 +msgid "# KEEPALIVES received in good order" +msgstr "" + +#: src/transport/gnunet-service-transport_neighbours.c:1601 +#, fuzzy +msgid "# KEEPALIVE_RESPONSEs discarded (not connected)" msgstr "# ОДГОВОР_ОДРЖИ_У_РАДУ поруке су одбачене (нисам повезан)" -#: src/transport/gnunet-service-transport_neighbours.c:1440 -msgid "# KEEPALIVE_RESPONSE messages discarded (not expected)" +#: src/transport/gnunet-service-transport_neighbours.c:1611 +#, fuzzy +msgid "# KEEPALIVE_RESPONSEs discarded (not expected)" msgstr "# ОДГОВОР_ОДРЖИ_У_РАДУ поруке су одбачене (није очекиван)" -#: src/transport/gnunet-service-transport_neighbours.c:1448 -msgid "# KEEPALIVE_RESPONSE messages discarded (address changed)" +#: src/transport/gnunet-service-transport_neighbours.c:1620 +#, fuzzy +msgid "# KEEPALIVE_RESPONSEs discarded (address changed)" msgstr "# ОДГОВОР_ОДРЖИ_У_РАДУ поруке су одбачене (адреса је измењена)" -#: src/transport/gnunet-service-transport_neighbours.c:1456 -msgid "# KEEPALIVE_RESPONSE messages discarded (wrong nonce)" +#: src/transport/gnunet-service-transport_neighbours.c:1630 +#, fuzzy +msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)" +msgstr "# ОДГОВОР_ОДРЖИ_У_РАДУ поруке су одбачене (погрешна тренутност)" + +#: src/transport/gnunet-service-transport_neighbours.c:1636 +#, fuzzy +msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)" +msgstr "# ОДГОВОР_ОДРЖИ_У_РАДУ поруке су одбачене (погрешна тренутност)" + +#: src/transport/gnunet-service-transport_neighbours.c:1643 +#, fuzzy +msgid "# KEEPALIVE_RESPONSEs received (OK)" msgstr "# ОДГОВОР_ОДРЖИ_У_РАДУ поруке су одбачене (погрешна тренутност)" -#: src/transport/gnunet-service-transport_neighbours.c:1534 +#: src/transport/gnunet-service-transport_neighbours.c:1714 msgid "# messages discarded due to lack of neighbour record" msgstr "# поруке су одбачене услед недостатка записа суседа" -#: src/transport/gnunet-service-transport_neighbours.c:1568 +#: src/transport/gnunet-service-transport_neighbours.c:1748 msgid "# bandwidth quota violations by other peers" msgstr "# повређивање квоте пропусног опсега од стране других парњака" -#: src/transport/gnunet-service-transport_neighbours.c:1584 +#: src/transport/gnunet-service-transport_neighbours.c:1763 msgid "# ms throttling suggested" msgstr "# ms пригушење се саветује" -#: src/transport/gnunet-service-transport_neighbours.c:1678 -#, c-format -msgid "Failed to send CONNECT message to peer `%s' using address `%s' session %p\n" -msgstr "Нисам успео да пошаљем поруку ПОВЕЖИ_СЕ парњаку „%s“ користећи адресу „%s“ сесије %p\n" +#: src/transport/gnunet-service-transport_neighbours.c:1886 +#, fuzzy, c-format +msgid "Failed to send SYN message to peer `%s'\n" +msgstr "Нисам успео да обрадим долазну поруку са помоћника „%s“\n" -#: src/transport/gnunet-service-transport_neighbours.c:1705 -msgid "# Failed attempts to switch addresses (failed to send CONNECT CONT)" -msgstr "# Нису успели покушаји за пребацивање адреса (нисам успео да пошаљем УКУПНО ПОВЕЖИ_СЕ)" +#: src/transport/gnunet-service-transport_neighbours.c:1912 +#, fuzzy +msgid "# Failed attempts to switch addresses (failed to send SYN CONT)" +msgstr "" +"# Нису успели покушаји за пребацивање адреса (нисам успео да пошаљем " +"ПОВЕЖИ_СЕ)" -#: src/transport/gnunet-service-transport_neighbours.c:1751 -msgid "# SESSION_CONNECT messages sent" -msgstr "# ПОВЕЗИВАЊЕ_СЕСИЈЕ поруке су послате" +#: src/transport/gnunet-service-transport_neighbours.c:1953 +#, fuzzy +msgid "# SYN messages sent" +msgstr "# ПРЕКИНИ_ВЕЗУ поруке су послате" -#: src/transport/gnunet-service-transport_neighbours.c:1767 -#, c-format -msgid "Failed to transmit CONNECT message via plugin to %s\n" +#: src/transport/gnunet-service-transport_neighbours.c:1970 +#, fuzzy, c-format +msgid "Failed to transmit SYN message to %s\n" msgstr "Нисам успео да пренесем поруку ПОВЕЖИ_СЕ путем прикључка ка „%s“\n" -#: src/transport/gnunet-service-transport_neighbours.c:1794 -msgid "# Failed attempts to switch addresses (failed to send CONNECT)" -msgstr "# Нису успели покушаји за пребацивање адреса (нисам успео да пошаљем ПОВЕЖИ_СЕ)" +#: src/transport/gnunet-service-transport_neighbours.c:2006 +#, fuzzy +msgid "# Failed attempts to switch addresses (failed to send SYN)" +msgstr "" +"# Нису успели покушаји за пребацивање адреса (нисам успео да пошаљем " +"ПОВЕЖИ_СЕ)" -#: src/transport/gnunet-service-transport_neighbours.c:1844 -#, c-format -msgid "Failed to send CONNECT_ACK message to peer `%s' using address `%s' session %p\n" -msgstr "Нисам успео да пошаљем поруку ПОВЕЖИ_АЦК парњаку „%s“ користећи адресу „%s“ сесије %p\n" +#: src/transport/gnunet-service-transport_neighbours.c:2077 +#, fuzzy, c-format +msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n" +msgstr "" +"Нисам успео да пошаљем поруку ПОВЕЖИ_АЦК парњаку „%s“ користећи адресу „%s“ " +"сесије %p\n" -#: src/transport/gnunet-service-transport_neighbours.c:1899 -msgid "# CONNECT_ACK messages sent" +#: src/transport/gnunet-service-transport_neighbours.c:2132 +#, fuzzy +msgid "# SYN_ACK messages sent" msgstr "# ПОВЕЖИ_АЦК поруке су послате" -#: src/transport/gnunet-service-transport_neighbours.c:1914 -#, c-format -msgid "Failed to transmit CONNECT_ACK message via plugin to %s\n" +#: src/transport/gnunet-service-transport_neighbours.c:2150 +#, fuzzy, c-format +msgid "Failed to transmit SYN_ACK message to %s\n" msgstr "Нисам успео да пренесем поруку ПОВЕЖИ_АЦК путем прикључка ка „%s“\n" -#: src/transport/gnunet-service-transport_neighbours.c:2192 -#, c-format -msgid "Blacklisting disapproved to connect to peer `%s'\n" -msgstr "Списак забрана није одобрио повезивање са парњаком „%s“\n" - -#: src/transport/gnunet-service-transport_neighbours.c:2312 -msgid "# CONNECT messages received" -msgstr "# ПОВЕЖИ_СЕ поруке су примљене" +#: src/transport/gnunet-service-transport_neighbours.c:2314 +#, fuzzy +msgid "# SYN messages received" +msgstr "# ПИНГ поруке су примљене" -#: src/transport/gnunet-service-transport_neighbours.c:2317 -#, c-format -msgid "CONNECT request from peer `%s' ignored due impending shutdown\n" +#: src/transport/gnunet-service-transport_neighbours.c:2320 +#, fuzzy, c-format +msgid "SYN request from peer `%s' ignored due impending shutdown\n" msgstr "ПОВЕЖИ_СЕ захтев са парњака „%s“ је занемарен због неминовног гашења\n" -#: src/transport/gnunet-service-transport_neighbours.c:2590 +#: src/transport/gnunet-service-transport_neighbours.c:2731 msgid "# Attempts to switch addresses" msgstr "# Покушаји за пребацивање адреса" -#: src/transport/gnunet-service-transport_neighbours.c:3012 -msgid "# Failed attempts to switch addresses (no response)" -msgstr "# Нису успели покушаји за пребацивање адреса (нема одговора)" - -#: src/transport/gnunet-service-transport_neighbours.c:3107 -msgid "# CONNECT_ACK messages received" -msgstr "# ПОВЕЖИ_АЦК поруке су примљене" +#: src/transport/gnunet-service-transport_neighbours.c:3244 +#, fuzzy +msgid "# SYN_ACK messages received" +msgstr "# поруке СЕСИЈА_АЦК су примљене" -#: src/transport/gnunet-service-transport_neighbours.c:3115 -msgid "# unexpected CONNECT_ACK messages (no peer)" +#: src/transport/gnunet-service-transport_neighbours.c:3252 +#, fuzzy +msgid "# unexpected SYN_ACK messages (no peer)" msgstr "# неочекиване ПОВЕЖИ_АЦК поруке (нема парњака)" -#: src/transport/gnunet-service-transport_neighbours.c:3129 -#: src/transport/gnunet-service-transport_neighbours.c:3164 -msgid "# unexpected CONNECT_ACK messages (not ready)" +#: src/transport/gnunet-service-transport_neighbours.c:3272 +#: src/transport/gnunet-service-transport_neighbours.c:3300 +#, fuzzy +msgid "# unexpected SYN_ACK messages (not ready)" msgstr "# неочекиване ПОВЕЖИ_АЦК поруке (нису спремне)" -#: src/transport/gnunet-service-transport_neighbours.c:3176 -msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" +#: src/transport/gnunet-service-transport_neighbours.c:3315 +#, fuzzy +msgid "# unexpected SYN_ACK messages (waiting on ATS)" msgstr "# неочекиване ПОВЕЖИ_АЦК поруке (чекам на АТС)" -#: src/transport/gnunet-service-transport_neighbours.c:3200 +#: src/transport/gnunet-service-transport_neighbours.c:3345 msgid "# Successful attempts to switch addresses" msgstr "# Покушаји за пребацивање адреса су успели" -#: src/transport/gnunet-service-transport_neighbours.c:3208 -msgid "# unexpected CONNECT_ACK messages (disconnecting)" +#: src/transport/gnunet-service-transport_neighbours.c:3359 +#, fuzzy +msgid "# unexpected SYN_ACK messages (disconnecting)" msgstr "# неочекиване ПОВЕЖИ_АЦК поруке (прекидам везу)" -#: src/transport/gnunet-service-transport_neighbours.c:3396 -msgid "# SESSION_ACK messages received" -msgstr "# поруке СЕСИЈА_АЦК су примљене" +#: src/transport/gnunet-service-transport_neighbours.c:3548 +#, fuzzy +msgid "# ACK messages received" +msgstr "# ПОВЕЖИ_АЦК поруке су примљене" -#: src/transport/gnunet-service-transport_neighbours.c:3424 -msgid "# unexpected SESSION_ACK messages" +#: src/transport/gnunet-service-transport_neighbours.c:3582 +#, fuzzy +msgid "# unexpected ACK messages" msgstr "# неочекиване СЕСИЈА_АЦК поруке" -#: src/transport/gnunet-service-transport_neighbours.c:3490 -msgid "# SET QUOTA messages ignored (no such peer)" -msgstr "# ПОСТАВИ КВОТУ поруке су занемарене (нема таквог парњака)" +#: src/transport/gnunet-service-transport_neighbours.c:3672 +#, fuzzy +msgid "# quota messages ignored (malformed)" +msgstr "# поруке прекида везе су занемарене(лоше су)" -#: src/transport/gnunet-service-transport_neighbours.c:3505 -msgid "# disconnects due to quota of 0" -msgstr "# прекиди везе због квоте 0" +#: src/transport/gnunet-service-transport_neighbours.c:3679 +#, fuzzy +msgid "# QUOTA messages received" +msgstr "# ПОНГ поруке су примљене" -#: src/transport/gnunet-service-transport_neighbours.c:3545 +#: src/transport/gnunet-service-transport_neighbours.c:3722 msgid "# disconnect messages ignored (malformed)" msgstr "# поруке прекида везе су занемарене(лоше су)" -#: src/transport/gnunet-service-transport_neighbours.c:3551 +#: src/transport/gnunet-service-transport_neighbours.c:3729 msgid "# DISCONNECT messages received" msgstr "# ПРЕКИНИ_ВЕЗУ поруке су примљене" -#: src/transport/gnunet-service-transport_neighbours.c:3560 +#: src/transport/gnunet-service-transport_neighbours.c:3742 msgid "# disconnect messages ignored (timestamp)" msgstr "# поруке прекида везе су занемарене(временска ознака)" -#: src/transport/gnunet-service-transport_neighbours.c:3687 +#: src/transport/gnunet-service-transport_neighbours.c:3879 msgid "# disconnected from peer upon explicit request" msgstr "# прекинута је веза са парњаком услед изричитог захтева" -#: src/transport/gnunet-service-transport_plugins.c:120 +#: src/transport/gnunet-service-transport_plugins.c:157 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n" msgstr "Услузи преноса недостаје опција ОГРАНИЧЕЊЕ_СУСЕДА.\n" -#: src/transport/gnunet-service-transport_plugins.c:178 -#: src/transport/gnunet-service-transport_plugins.c:186 -#: src/transport/gnunet-service-transport_plugins.c:194 -#: src/transport/gnunet-service-transport_plugins.c:202 -#: src/transport/gnunet-service-transport_plugins.c:210 -#: src/transport/gnunet-service-transport_plugins.c:218 -#: src/transport/gnunet-service-transport_plugins.c:226 -#: src/transport/gnunet-service-transport_plugins.c:234 -#: src/transport/gnunet-service-transport_plugins.c:242 -#: src/transport/gnunet-service-transport_plugins.c:250 -#: src/transport/gnunet-service-transport_plugins.c:258 +#: src/transport/gnunet-service-transport_plugins.c:222 +#: src/transport/gnunet-service-transport_plugins.c:230 +#: src/transport/gnunet-service-transport_plugins.c:238 +#: src/transport/gnunet-service-transport_plugins.c:246 +#: src/transport/gnunet-service-transport_plugins.c:254 +#: src/transport/gnunet-service-transport_plugins.c:262 +#: src/transport/gnunet-service-transport_plugins.c:270 +#: src/transport/gnunet-service-transport_plugins.c:278 +#: src/transport/gnunet-service-transport_plugins.c:286 +#: src/transport/gnunet-service-transport_plugins.c:294 +#: src/transport/gnunet-service-transport_plugins.c:302 #, c-format msgid "Missing function `%s' in transport plugin for `%s'\n" msgstr "Недостаје функција „%s“ у прикључку преноса за „%s“\n" -#: src/transport/gnunet-service-transport_plugins.c:265 +#: src/transport/gnunet-service-transport_plugins.c:309 #, c-format msgid "Did not load plugin `%s' due to missing functions\n" msgstr "Не учитавам прикључак „%s“ услед недостајућих функција\n" -#: src/transport/gnunet-service-transport_validation.c:488 -msgid "# address records discarded" +#: src/transport/gnunet-service-transport_validation.c:386 +#, fuzzy +msgid "# Addresses in validation map" +msgstr "# поновно потврђивање адресе је започето" + +#: src/transport/gnunet-service-transport_validation.c:489 +#: src/transport/gnunet-service-transport_validation.c:679 +#: src/transport/gnunet-service-transport_validation.c:1000 +#: src/transport/gnunet-service-transport_validation.c:1627 +#, fuzzy +msgid "# validations running" +msgstr "База података Скулајта ради\n" + +#: src/transport/gnunet-service-transport_validation.c:531 +#, fuzzy +msgid "# address records discarded (timeout)" msgstr "# записи адресе су одбачени" -#: src/transport/gnunet-service-transport_validation.c:558 -#, c-format -msgid "Not transmitting `%s' with `%s', message too big (%u bytes!). This should not happen.\n" -msgstr "Не преносим „%s“ са „%s“, порука је превелика (%u бајта!). Ово није требало да се деси.\n" +#: src/transport/gnunet-service-transport_validation.c:580 +#, fuzzy +msgid "# address records discarded (blacklist)" +msgstr "# записи адресе су одбачени" -#: src/transport/gnunet-service-transport_validation.c:616 -msgid "# PING without HELLO messages sent" -msgstr "# ПИНГ без „HELLO“ порука је послат" +#: src/transport/gnunet-service-transport_validation.c:670 +#, fuzzy +msgid "# PINGs for address validation sent" +msgstr "# поновно потврђивање адресе је започето" + +#: src/transport/gnunet-service-transport_validation.c:752 +msgid "# validations delayed by global throttle" +msgstr "" -#: src/transport/gnunet-service-transport_validation.c:722 +#: src/transport/gnunet-service-transport_validation.c:789 msgid "# address revalidations started" msgstr "# поновно потврђивање адресе је започето" -#: src/transport/gnunet-service-transport_validation.c:1011 +#: src/transport/gnunet-service-transport_validation.c:1127 msgid "# PING message for different peer received" msgstr "# ПИНГ порука за различитог парњака је примљена" -#: src/transport/gnunet-service-transport_validation.c:1062 +#: src/transport/gnunet-service-transport_validation.c:1180 #, c-format msgid "Plugin `%s' not available, cannot confirm having this address\n" msgstr "Прикључак „%s“ није доступан, не могу да потврдим имајући ову адресу\n" -#: src/transport/gnunet-service-transport_validation.c:1072 +#: src/transport/gnunet-service-transport_validation.c:1193 msgid "# failed address checks during validation" msgstr "# неуспешне провере адресе за време потврђивања" -#: src/transport/gnunet-service-transport_validation.c:1075 +#: src/transport/gnunet-service-transport_validation.c:1198 #, c-format msgid "Address `%s' is not one of my addresses, not confirming PING\n" msgstr "Адреса „%s“ није једна од мојих адреса, не потврђујем ПИНГ\n" -#: src/transport/gnunet-service-transport_validation.c:1083 +#: src/transport/gnunet-service-transport_validation.c:1207 msgid "# successful address checks during validation" msgstr "# успешне провере адресе за време потврђивања" -#: src/transport/gnunet-service-transport_validation.c:1095 -#, c-format -msgid "Not confirming PING from peer `%s' with address `%s' since I cannot confirm having this address.\n" -msgstr "Не потврђујем ПИНГ од парњака „%s“ са адресом „%s“ јер не могу да потврдим да имам ту адресу.\n" - -#: src/transport/gnunet-service-transport_validation.c:1103 +#: src/transport/gnunet-service-transport_validation.c:1222 #, c-format -msgid "Received a PING message with validation bug from `%s'\n" -msgstr "Примих ПИНГ поруку са грешком потврђивања са „%s“\n" +msgid "" +"Not confirming PING from peer `%s' with address `%s' since I cannot confirm " +"having this address.\n" +msgstr "" +"Не потврђујем ПИНГ од парњака „%s“ са адресом „%s“ јер не могу да потврдим " +"да имам ту адресу.\n" -#: src/transport/gnunet-service-transport_validation.c:1157 +#: src/transport/gnunet-service-transport_validation.c:1279 #, c-format msgid "Failed to create PONG signature for peer `%s'\n" msgstr "Нисам успео да направим ПОНГ потпис за парњака „%s“\n" -#: src/transport/gnunet-service-transport_validation.c:1206 +#: src/transport/gnunet-service-transport_validation.c:1331 msgid "# PONGs unicast via reliable transport" msgstr "# једноодредишни пренос ПОНГ-ова путем поузданог преноса" -#: src/transport/gnunet-service-transport_validation.c:1215 +#: src/transport/gnunet-service-transport_validation.c:1340 msgid "# PONGs multicast to all available addresses" msgstr "# вишеодредишни пренос ПОНГ-ова ка свим доступним адресама" -#: src/transport/gnunet-service-transport_validation.c:1356 +#: src/transport/gnunet-service-transport_validation.c:1515 msgid "# PONGs dropped, no matching pending validation" msgstr "# ПОНГ-ови су одбачени, нема одговарајућих потврђивања на чекању" -#: src/transport/gnunet-service-transport_validation.c:1371 +#: src/transport/gnunet-service-transport_validation.c:1533 msgid "# PONGs dropped, signature expired" msgstr "# ПОНГ-ови су одбачени, потпис је истекао" -#: src/transport/gnunet-service-transport_validation.c:1493 -#, c-format -msgid "Validation received new %s message for peer `%s' with size %u\n" -msgstr "Потврђивање је примило нову „%s“ поруку за парњака „%s“ са величином %u\n" +#: src/transport/gnunet-service-transport_validation.c:1590 +#, fuzzy +msgid "# validations succeeded" +msgstr "# поновно потврђивање адресе је започето" -#: src/transport/gnunet-service-transport_validation.c:1500 -#, c-format -msgid "Adding `%s' without addresses for peer `%s'\n" -msgstr "Додајем „%s“ без адреса за парњака „%s“\n" +#: src/transport/gnunet-service-transport_validation.c:1645 +#, fuzzy +msgid "# HELLOs given to peerinfo" +msgstr "# „HELLO“-и су добијени из података парњака" -#: src/transport/gnunet-transport.c:367 +#: src/transport/gnunet-transport.c:406 #, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" msgstr "Пренесох %llu бајта/сек (%llu бајта за %s)\n" -#: src/transport/gnunet-transport.c:375 +#: src/transport/gnunet-transport.c:415 #, c-format msgid "Received %llu bytes/s (%llu bytes in %s)\n" msgstr "Примих %llu бајта/сек (%llu бајта за %s)\n" -#: src/transport/gnunet-transport.c:415 +#: src/transport/gnunet-transport.c:454 #, c-format msgid "Failed to connect to `%s'\n" msgstr "Нисам успео да се повежем на „%s“\n" -#: src/transport/gnunet-transport.c:428 +#: src/transport/gnunet-transport.c:466 #, c-format msgid "Failed to resolve address for peer `%s'\n" msgstr "Нисам успео да решим адресу за парњака „%s“\n" -#: src/transport/gnunet-transport.c:438 -msgid "Failed to list connections, timeout occured\n" +#: src/transport/gnunet-transport.c:477 +#, fuzzy +msgid "Failed to list connections, timeout occurred\n" msgstr "Нисам успео да испишем везе, дошло је до истека времена\n" -#: src/transport/gnunet-transport.c:559 +#: src/transport/gnunet-transport.c:504 +#, fuzzy, c-format +msgid "Transmitting %u bytes\n" +msgstr "Преносим %u бајта ка %s\n" + +#: src/transport/gnunet-transport.c:537 #, c-format msgid "" -"Peer `%s' %s %s\n" -"\t%s%s\n" -"\t%s%s\n" -"\t%s%s\n" +"Successfully connected to `%s', starting to send benchmark data in %u Kb " +"blocks\n" msgstr "" -"Парњак „%s“ %s %s\n" -"\t%s%s\n" -"\t%s%s\n" -"\t%s%s\n" - -#: src/transport/gnunet-transport.c:586 -#, c-format -msgid "Peer `%s' %s `%s' \n" -msgstr "Парњак „%s“ %s „%s“ \n" - -#: src/transport/gnunet-transport.c:712 -msgid "No transport plugins configured, peer will never communicate\n" -msgstr "Нису подешени прикључци преноса, парњак неће никада комуницирати\n" - -#: src/transport/gnunet-transport.c:726 -#, c-format -msgid "No port configured for plugin `%s', cannot test it\n" -msgstr "Није подешен прикључник за прикључак „%s“, не могу да га тестирам\n" +"Успешно смо повезани са „%s“, почињем да шаљем податке оцењивања у блоковима " +"од %u Kb\n" -#: src/transport/gnunet-transport.c:789 +#: src/transport/gnunet-transport.c:566 #, c-format -msgid "Transmitting %u bytes to %s\n" -msgstr "Преносим %u бајта ка %s\n" - -#: src/transport/gnunet-transport.c:810 -#, c-format -msgid "Successfully connected to `%s'\n" -msgstr "Успешно је успостављена веза са „%s“\n" +msgid "Disconnected from peer `%s' while benchmarking\n" +msgstr "Прекинута је веза са парњаком „%s“ за време оцењивања\n" -#: src/transport/gnunet-transport.c:834 +#: src/transport/gnunet-transport.c:590 src/transport/gnunet-transport.c:619 #, c-format -msgid "Successfully connected to `%s', starting to send benchmark data in %u Kb blocks\n" -msgstr "Успешно смо повезани са „%s“, почињем да шаљем податке оцењивања у блоковима од %u Kb\n" +msgid "%24s: %-17s %4s (%u connections in total)\n" +msgstr "%24s: %-17s %4s (укупно повезивања: %u)\n" -#: src/transport/gnunet-transport.c:865 -#, c-format -msgid "Successfully disconnected from `%s'\n" -msgstr "Успешно је прекинута веза са „%s“\n" +#: src/transport/gnunet-transport.c:592 +msgid "Connected to" +msgstr "Повезани сте са" -#: src/transport/gnunet-transport.c:888 -#, c-format -msgid "Disconnected from peer `%s' while benchmarking\n" -msgstr "Прекинута је веза са парњаком „%s“ за време оцењивања\n" +#: src/transport/gnunet-transport.c:621 +msgid "Disconnected from" +msgstr "Прекинута је веза са" -#: src/transport/gnunet-transport.c:950 -#, c-format -msgid "Received %u bytes from %s\n" +#: src/transport/gnunet-transport.c:654 +#, fuzzy, c-format +msgid "Received %u bytes\n" msgstr "Примих %u бајта од „%s“\n" -#: src/transport/gnunet-transport.c:975 +#: src/transport/gnunet-transport.c:689 #, c-format msgid "Peer `%s': %s %s in state `%s' until %s\n" msgstr "Парњак „%s“: %s %s у стању „%s“ све до %s\n" -#: src/transport/gnunet-transport.c:986 +#: src/transport/gnunet-transport.c:701 #, c-format msgid "Peer `%s': %s %s\n" msgstr "Парњак „%s“: %s %s\n" -#: src/transport/gnunet-transport.c:1197 src/transport/gnunet-transport.c:1222 -msgid "Failed to send connect request to transport service\n" -msgstr "Нисам успео да пошаљем захтев за повезивање са услугом преноса\n" +#: src/transport/gnunet-transport.c:1103 +#, fuzzy +msgid "Monitor disconnected from transport service. Reconnecting.\n" +msgstr "" +"Клијент праћења је ископчан са аур услуге, покушавам поново да се повежем.\n" -#: src/transport/gnunet-transport.c:1266 -#, c-format -msgid "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, %s, %s\n" +#: src/transport/gnunet-transport.c:1199 +#, fuzzy, c-format +msgid "" +"Multiple operations given. Please choose only one operation: %s, %s, %s, %s, " +"%s, %s %s\n" msgstr "Дато је више радњи. Изаберите само једну од: %s, %s, %s, %s, %s, %s\n" -#: src/transport/gnunet-transport.c:1274 -#, c-format -msgid "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s\n" +#: src/transport/gnunet-transport.c:1214 +#, fuzzy, c-format +msgid "" +"No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n" msgstr "Није дата радња. Изаберите једну од: %s, %s, %s, %s, %s, %s\n" -#: src/transport/gnunet-transport.c:1293 src/transport/gnunet-transport.c:1323 -#: src/transport/gnunet-transport.c:1353 src/transport/gnunet-transport.c:1376 -#: src/transport/gnunet-transport.c:1419 -msgid "Failed to connect to transport service\n" +#: src/transport/gnunet-transport.c:1242 +#, fuzzy +msgid "Failed to connect to transport service for disconnection\n" msgstr "Нисам успео да се повежем са услугом преноса\n" -#: src/transport/gnunet-transport.c:1302 src/transport/gnunet-transport.c:1332 -#: src/transport/gnunet-transport.c:1362 -msgid "Failed to send request to transport service\n" -msgstr "Нисам успео да пошаљем захтев услузи преноса\n" +#: src/transport/gnunet-transport.c:1248 +msgid "Blacklisting request in place, stop with CTRL-C\n" +msgstr "" + +#: src/transport/gnunet-transport.c:1270 src/transport/gnunet-transport.c:1296 +#: src/transport/gnunet-transport.c:1342 +msgid "Failed to connect to transport service\n" +msgstr "Нисам успео да се повежем са услугом преноса\n" -#: src/transport/gnunet-transport.c:1381 +#: src/transport/gnunet-transport.c:1301 msgid "Starting to receive benchmark data\n" msgstr "Почињем да примам податке оцењивања\n" -#: src/transport/gnunet-transport.c:1465 -msgid "print information for all peers (instead of only connected peers )" +#: src/transport/gnunet-transport.c:1367 +#, fuzzy +msgid "print information for all peers (instead of only connected peers)" msgstr "исписује податке за све парњаке (уместо само о повезаним парњацима )" -#: src/transport/gnunet-transport.c:1468 +#: src/transport/gnunet-transport.c:1373 msgid "measure how fast we are receiving data from all peers (until CTRL-C)" msgstr "мери колико брзо примамо податке са свих парњака (све до КТРЛ-Ц)" -#: src/transport/gnunet-transport.c:1471 -msgid "connect to a peer" -msgstr "повезује се са парњаком" - -#: src/transport/gnunet-transport.c:1474 -msgid "disconnect to a peer" +#: src/transport/gnunet-transport.c:1377 +#, fuzzy +msgid "disconnect from a peer" msgstr "прекида везу са парњаком" -#: src/transport/gnunet-transport.c:1477 -msgid "print information for all pending validations " -msgstr "исписује податке за сва потврђивања на чекању " - -#: src/transport/gnunet-transport.c:1480 -msgid "print information for all pending validations continously" -msgstr "непрекидно исписује податке за сва потврђивања на чекању" - -#: src/transport/gnunet-transport.c:1483 +#: src/transport/gnunet-transport.c:1383 msgid "provide information about all current connections (once)" msgstr "обезбеђује податке о свим тренутним везама (једном)" -#: src/transport/gnunet-transport.c:1489 -msgid "provide information about all connects and disconnect events (continuously)" -msgstr "обезбеђује податке о свим догађајима повезивања и прекида везе (непрекидно)" +#: src/transport/gnunet-transport.c:1395 +msgid "" +"provide information about all connects and disconnect events (continuously)" +msgstr "" +"обезбеђује податке о свим догађајима повезивања и прекида везе (непрекидно)" -#: src/transport/gnunet-transport.c:1491 +#: src/transport/gnunet-transport.c:1399 msgid "do not resolve hostnames" msgstr "не разрешава називе домаћина" -#: src/transport/gnunet-transport.c:1493 +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 msgid "peer identity" msgstr "идентитет парњака" -#: src/transport/gnunet-transport.c:1495 +#: src/transport/gnunet-transport.c:1408 +msgid "monitor plugin sessions" +msgstr "" + +#: src/transport/gnunet-transport.c:1414 msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "шаље податке за оцењивање другим парњацима (све до КТРЛ-Ц)" -#: src/transport/gnunet-transport.c:1498 -msgid "test transport configuration (involves external server)" -msgstr "тестира подешавање транспорта (призива спољни сервер)" - -#: src/transport/gnunet-transport.c:1507 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 msgid "Direct access to transport service." msgstr "Непосредан приступ услузи преноса." -#: src/transport/plugin_transport_bluetooth.c:621 -msgid "# Bluetooth ACKs sent" -msgstr "# АЦК-ови блутута су послати" - -#: src/transport/plugin_transport_bluetooth.c:640 -msgid "# Bluetooth messages defragmented" -msgstr "# делићи Блутут порука су уједињени" - -#: src/transport/plugin_transport_bluetooth.c:686 -#: src/transport/plugin_transport_bluetooth.c:737 -#: src/transport/plugin_transport_bluetooth.c:1942 -msgid "# Bluetooth sessions allocated" -msgstr "# Блутут сесије су додељене" - -#: src/transport/plugin_transport_bluetooth.c:837 -msgid "# Bluetooth message fragments sent" -msgstr "# Делићи блутут поруке су послати" - -#: src/transport/plugin_transport_bluetooth.c:861 -msgid "# Bluetooth messages pending (with fragmentation)" -msgstr "# Поруке блутута су на чекању (са расцепканошћу)" - -#: src/transport/plugin_transport_bluetooth.c:969 -#: src/transport/plugin_transport_bluetooth.c:1054 -#: src/transport/plugin_transport_bluetooth.c:1944 -msgid "# Bluetooth MAC endpoints allocated" -msgstr "# Крајње тачке Блутут МАЦ-а су додељене" - -#: src/transport/plugin_transport_bluetooth.c:1307 -msgid "# HELLO messages received via Bluetooth" -msgstr "# „HELLO“ поруке су примљене путем блутута" - -#: src/transport/plugin_transport_bluetooth.c:1331 -msgid "# fragments received via Bluetooth" -msgstr "# делићи су примљени путем Блутута" - -#: src/transport/plugin_transport_bluetooth.c:1341 -msgid "# ACKs received via Bluetooth" -msgstr "# АЦК-ови су примљени путем блутута" +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" -#: src/transport/plugin_transport_bluetooth.c:1401 -msgid "# Bluetooth DATA messages discarded due to CRC32 error" -msgstr "# Поруке ПОДАТАКА блутута су одбачене услед „CRC32“ грешке" +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" -#: src/transport/plugin_transport_bluetooth.c:1512 -msgid "# DATA messages received via Bluetooth" -msgstr "# поруке ПОДАТАКА су примљене путем блутута" +#: src/transport/gnunet-transport-profiler.c:581 +#, fuzzy +msgid "receive data from peer" +msgstr "# одговори су примљени за друге парњаке" -#: src/transport/plugin_transport_bluetooth.c:1547 -msgid "# Bluetooth DATA messages processed" -msgstr "# Поруке Блутут ПОДАТАКА су обрађене" +#: src/transport/gnunet-transport-profiler.c:586 +msgid "iterations" +msgstr "" -#: src/transport/plugin_transport_bluetooth.c:1610 -msgid "# HELLO beacons sent via Bluetooth" -msgstr "# „HELLO“ ознаке су послате путем Блутута" +#: src/transport/gnunet-transport-profiler.c:591 +#, fuzzy +msgid "number of messages to send" +msgstr "број парњака у концензусу" -#: src/transport/plugin_transport_bluetooth.c:1723 -msgid "Bluetooth address with invalid size encountered\n" -msgstr "Наишли смо на адресу блутута са неисправном величином\n" +#: src/transport/gnunet-transport-profiler.c:596 +#, fuzzy +msgid "message size to use" +msgstr "експеримент за коришћење" -#: src/transport/plugin_transport_bluetooth.c:1923 -#, c-format -msgid "Helper binary `%s' not SUID, cannot run bluetooth transport\n" -msgstr "Извршна помоћника „%s“ није СУИБ, не могу да покренем блутут пренос\n" +#: src/transport/plugin_transport_http_client.c:1488 +#: src/transport/plugin_transport_http_server.c:2331 +#: src/transport/plugin_transport_http_server.c:3562 +#: src/transport/plugin_transport_tcp.c:3773 +#: src/transport/plugin_transport_tcp.c:3780 +msgid "TCP_STEALTH not supported on this platform.\n" +msgstr "" -#: src/transport/plugin_transport_http_client.c:1622 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" -msgstr "Не могу да покренем мулти ручку „curl“-а, нисам успео да покренем „%s“ прикључак!\n" +msgstr "" +"Не могу да покренем мулти ручку „curl“-а, нисам успео да покренем „%s“ " +"прикључак!\n" -#: src/transport/plugin_transport_http_client.c:1697 -#: src/transport/plugin_transport_http_server.c:3007 +#: src/transport/plugin_transport_http_client.c:2189 +#: src/transport/plugin_transport_http_server.c:3276 #, c-format msgid "Shutting down plugin `%s'\n" msgstr "Гасим прикључак „%s“\n" -#: src/transport/plugin_transport_http_client.c:1722 -#: src/transport/plugin_transport_http_server.c:3063 +#: src/transport/plugin_transport_http_client.c:2206 +#: src/transport/plugin_transport_http_server.c:3346 #, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "Гашење за прикључак „%s“ је завршено\n" -#: src/transport/plugin_transport_http_client.c:1750 -#: src/transport/plugin_transport_http_server.c:2907 -#, c-format -msgid "Maximum number of connections is %u\n" +#: src/transport/plugin_transport_http_client.c:2240 +#, fuzzy, c-format +msgid "Maximum number of requests is %u\n" msgstr "Највећи број веза је %u\n" -#: src/transport/plugin_transport_http_server.c:1402 -#, c-format -msgid "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data size %u\n" -msgstr "Приступ из везе %p (%u од %u) за „%s“ „%s“ адреса „%s“ са величином података утовара %u\n" +#: src/transport/plugin_transport_http_server.c:1764 +#, fuzzy, c-format +msgid "" +"Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " +"size %lu\n" +msgstr "" +"Приступ из везе %p (%u од %u) за „%s“ „%s“ адреса „%s“ са величином података " +"утовара %u\n" -#: src/transport/plugin_transport_http_server.c:1663 +#: src/transport/plugin_transport_http_server.c:2040 #, c-format msgid "Accepting connection (%u of %u) from `%s'\n" msgstr "Прихватам везу (%u од %u) са „%s“\n" -#: src/transport/plugin_transport_http_server.c:1671 +#: src/transport/plugin_transport_http_server.c:2049 #, c-format -msgid "Server reached maximum number connections (%u), rejecting new connection\n" +msgid "" +"Server reached maximum number connections (%u), rejecting new connection\n" msgstr "Сервер је достигао највећи број веза (%u), одбацује нове везе\n" -#: src/transport/plugin_transport_http_server.c:1958 -msgid "Could not create a new TLS certificate, program `gnunet-transport-certificate-creation' could not be started!\n" -msgstr "Не могу да направим ново ТЛС уверење, програм „gnunet-transport-certificate-creation“ се не може покренути!\n" +#: src/transport/plugin_transport_http_server.c:2202 +msgid "" +"Could not create a new TLS certificate, program `gnunet-transport-" +"certificate-creation' could not be started!\n" +msgstr "" +"Не могу да направим ново ТЛС уверење, програм „gnunet-transport-certificate-" +"creation“ се не може покренути!\n" -#: src/transport/plugin_transport_http_server.c:1982 +#: src/transport/plugin_transport_http_server.c:2226 #, c-format msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n" -msgstr "Нисам нашао употребљиво ТЛС уверење а његово стварање на „%s/%s“ није успело!\n" +msgstr "" +"Нисам нашао употребљиво ТЛС уверење а његово стварање на „%s/%s“ није " +"успело!\n" + +#: src/transport/plugin_transport_http_server.c:2358 +msgid "Could not load or create server certificate! Loading plugin failed!\n" +msgstr "" -#: src/transport/plugin_transport_http_server.c:2405 +#: src/transport/plugin_transport_http_server.c:2684 msgid "Require valid port number for service in configuration!\n" msgstr "Захтева исправан број прикључника за услугу у подешавањима!\n" -#: src/transport/plugin_transport_http_server.c:2437 src/util/service.c:698 -#, c-format -msgid "Failed to resolve `%s': %s\n" -msgstr "Нисам успео да решим „%s“: %s\n" - -#: src/transport/plugin_transport_http_server.c:2454 src/util/service.c:715 -#, c-format -msgid "Failed to find %saddress for `%s'.\n" -msgstr "Нисам успео да нађем %s адресу за „%s“.\n" - -#: src/transport/plugin_transport_http_server.c:2565 +#: src/transport/plugin_transport_http_server.c:2849 #, c-format msgid "Found %u addresses to report to NAT service\n" msgstr "Нађох %u адрес за извештавање НАТ услузи\n" -#: src/transport/plugin_transport_http_server.c:2637 +#: src/transport/plugin_transport_http_server.c:2935 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "Искључујем ИПв6 јер није подржано на овом систему!\n" -#: src/transport/plugin_transport_http_server.c:2730 +#: src/transport/plugin_transport_http_server.c:3041 #, c-format msgid "IPv4 support is %s\n" msgstr "ИПв4 подршка је %s\n" -#: src/transport/plugin_transport_http_server.c:2744 +#: src/transport/plugin_transport_http_server.c:3056 #, c-format msgid "IPv6 support is %s\n" msgstr "ИПв6 подршка је %s\n" -#: src/transport/plugin_transport_http_server.c:2751 +#: src/transport/plugin_transport_http_server.c:3062 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n" msgstr "Ни ИПв4 ни ИПв6 није укључено! Исправите у подешавању\n" -#: src/transport/plugin_transport_http_server.c:2762 +#: src/transport/plugin_transport_http_server.c:3073 msgid "Port is required! Fix in configuration\n" msgstr "Прикључник је потребан! Исправите у подешавању\n" -#: src/transport/plugin_transport_http_server.c:2769 +#: src/transport/plugin_transport_http_server.c:3079 #, c-format msgid "Using port %u\n" msgstr "Користим прикључник %u\n" -#: src/transport/plugin_transport_http_server.c:2784 +#: src/transport/plugin_transport_http_server.c:3098 #, c-format msgid "Specific IPv4 address `%s' in configuration file is invalid!\n" msgstr "Специфична ИПв4 адреса „%s“ у датотеци подешавања је неисправна!\n" -#: src/transport/plugin_transport_http_server.c:2794 -#, c-format -msgid "Binding to IPv4 address %s\n" -msgstr "Свезујем за ИПв4 адресу %s\n" - -#: src/transport/plugin_transport_http_server.c:2815 +#: src/transport/plugin_transport_http_server.c:3133 #, c-format msgid "Specific IPv6 address `%s' in configuration file is invalid!\n" msgstr "Специфична ИПв6 адреса „%s“ у датотеци подешавања је неисправна!\n" -#: src/transport/plugin_transport_http_server.c:2825 -#, c-format -msgid "Binding to IPv6 address %s\n" -msgstr "Свезујем за ИПв6 адресу %s\n" - -#: src/transport/plugin_transport_http_server.c:2877 +#: src/transport/plugin_transport_http_server.c:3208 #, c-format msgid "Using external hostname `%s'\n" msgstr "Користим спољни назив домаћина „%s“\n" -#: src/transport/plugin_transport_http_server.c:2893 +#: src/transport/plugin_transport_http_server.c:3230 #, c-format msgid "Notifying transport only about hostname `%s'\n" msgstr "Обавештавам пренос само о називу домаћина „%s“\n" +#: src/transport/plugin_transport_http_server.c:3247 +#, c-format +msgid "Maximum number of connections is %u\n" +msgstr "Највећи број веза је %u\n" + +#: src/transport/plugin_transport_http_server.c:3574 +msgid "Unable to compile URL regex\n" +msgstr "" + #: src/transport/plugin_transport_smtp.c:223 #, c-format msgid "Received malformed message via %s. Ignored.\n" msgstr "Примих лошу поруку путем „%s“. Занемарујем.\n" -#: src/transport/plugin_transport_smtp.c:310 +#: src/transport/plugin_transport_smtp.c:312 msgid "SMTP filter string to invalid, lacks ': '\n" msgstr "Ниска СМТП филтера је превише неисправна, недостаје „: “\n" -#: src/transport/plugin_transport_smtp.c:319 +#: src/transport/plugin_transport_smtp.c:321 #, c-format msgid "SMTP filter string to long, capped to `%s'\n" msgstr "Ниска СМТП филтера је предуга, скраћена је на „%s“\n" -#: src/transport/plugin_transport_smtp.c:414 -#: src/transport/plugin_transport_smtp.c:424 -#: src/transport/plugin_transport_smtp.c:437 -#: src/transport/plugin_transport_smtp.c:456 -#: src/transport/plugin_transport_smtp.c:479 -#: src/transport/plugin_transport_smtp.c:487 -#: src/transport/plugin_transport_smtp.c:500 -#: src/transport/plugin_transport_smtp.c:511 +#: src/transport/plugin_transport_smtp.c:418 +#: src/transport/plugin_transport_smtp.c:428 +#: src/transport/plugin_transport_smtp.c:441 +#: src/transport/plugin_transport_smtp.c:460 +#: src/transport/plugin_transport_smtp.c:484 +#: src/transport/plugin_transport_smtp.c:492 +#: src/transport/plugin_transport_smtp.c:505 +#: src/transport/plugin_transport_smtp.c:516 #, c-format msgid "SMTP: `%s' failed: %s.\n" msgstr "СМТП: „%s“ није успело: %s.\n" -#: src/transport/plugin_transport_smtp.c:652 +#: src/transport/plugin_transport_smtp.c:666 msgid "No email-address specified, can not start SMTP transport.\n" msgstr "Није наведена адреса е-поште, не могу да почнем СМТП пренос.\n" -#: src/transport/plugin_transport_smtp.c:664 +#: src/transport/plugin_transport_smtp.c:678 msgid "# bytes received via SMTP" msgstr "# бајтови су примљени путем СМТП-а" -#: src/transport/plugin_transport_smtp.c:665 +#: src/transport/plugin_transport_smtp.c:679 msgid "# bytes sent via SMTP" msgstr "# бајтови су послати путем СМТП-а" -#: src/transport/plugin_transport_smtp.c:667 +#: src/transport/plugin_transport_smtp.c:681 msgid "# bytes dropped by SMTP (outgoing)" msgstr "# бајтови су одбачени СМТП-ом (одлазни)" -#: src/transport/plugin_transport_tcp.c:555 +#: src/transport/plugin_transport_tcp.c:1545 +#: src/transport/plugin_transport_tcp.c:2815 #, c-format msgid "Unexpected address length: %u bytes\n" msgstr "Неочекивана дужина адресе: %u бајта\n" -#: src/transport/plugin_transport_tcp.c:762 -#: src/transport/plugin_transport_tcp.c:928 -#: src/transport/plugin_transport_tcp.c:2005 -#: src/transport/plugin_transport_tcp.c:2558 +#: src/transport/plugin_transport_tcp.c:1724 +#: src/transport/plugin_transport_tcp.c:1941 +#: src/transport/plugin_transport_tcp.c:3058 +#: src/transport/plugin_transport_tcp.c:3884 msgid "# TCP sessions active" msgstr "# ТЦП сесије су активне" -#: src/transport/plugin_transport_tcp.c:795 -#: src/transport/plugin_transport_tcp.c:921 -#: src/transport/plugin_transport_tcp.c:1009 -#: src/transport/plugin_transport_tcp.c:1056 -#: src/transport/plugin_transport_tcp.c:1219 -#: src/transport/plugin_transport_tcp.c:1237 +#: src/transport/plugin_transport_tcp.c:1765 +#: src/transport/plugin_transport_tcp.c:1923 +#: src/transport/plugin_transport_tcp.c:2038 +#: src/transport/plugin_transport_tcp.c:2107 +#: src/transport/plugin_transport_tcp.c:2208 +#: src/transport/plugin_transport_tcp.c:2233 msgid "# bytes currently in TCP buffers" msgstr "# бајтова тренутно у ТЦП међумеморијама" -#: src/transport/plugin_transport_tcp.c:798 +#: src/transport/plugin_transport_tcp.c:1770 msgid "# bytes discarded by TCP (disconnect)" msgstr "# бајтови су одбачени ТЦП-ом (прекид везе)" -#: src/transport/plugin_transport_tcp.c:1012 +#: src/transport/plugin_transport_tcp.c:2043 msgid "# bytes discarded by TCP (timeout)" msgstr "# бајтови су одбачени ТЦП-ом (истекло време)" -#: src/transport/plugin_transport_tcp.c:1059 +#: src/transport/plugin_transport_tcp.c:2111 msgid "# bytes transmitted via TCP" msgstr "# бајтови су пренесени путем ТЦП-а" -#: src/transport/plugin_transport_tcp.c:1193 -#, c-format -msgid "Trying to send with invalid session %p\n" -msgstr "Покушавам да пошаљем са неисправном сесијом %p\n" - -#: src/transport/plugin_transport_tcp.c:1462 +#: src/transport/plugin_transport_tcp.c:2497 msgid "# requests to create session with invalid address" msgstr "# захтева за стварање сесије са неисправном адресом" -#: src/transport/plugin_transport_tcp.c:1567 +#: src/transport/plugin_transport_tcp.c:2660 msgid "# transport-service disconnect requests for TCP" msgstr "# захтеви прекида везе услуге преноса за ТЦП" -#: src/transport/plugin_transport_tcp.c:2055 +#: src/transport/plugin_transport_tcp.c:3116 msgid "# TCP WELCOME messages received" msgstr "# поруке ТЦП ДОБРОДОШЛИЦЕ су примљене" -#: src/transport/plugin_transport_tcp.c:2215 +#: src/transport/plugin_transport_tcp.c:3307 msgid "# bytes received via TCP" msgstr "# бајта је примљено путем ТЦП-а" -#: src/transport/plugin_transport_tcp.c:2279 -msgid "# network-level TCP disconnect events" +#: src/transport/plugin_transport_tcp.c:3353 +#: src/transport/plugin_transport_tcp.c:3410 +#, fuzzy +msgid "# TCP server connections active" +msgstr "# меш везе су радне" + +#: src/transport/plugin_transport_tcp.c:3357 +#, fuzzy +msgid "# TCP server connect events" msgstr "# догађаји ТЦП мрежног нивоа прекидања везе" -#: src/transport/plugin_transport_tcp.c:2437 src/util/service.c:582 -#: src/util/service.c:588 -#, c-format -msgid "Require valid port number for service `%s' in configuration!\n" -msgstr "Захтева исправан број прикључника за услугу „%s“ у подешавањима!\n" +#: src/transport/plugin_transport_tcp.c:3363 +msgid "TCP connection limit reached, suspending server\n" +msgstr "" + +#: src/transport/plugin_transport_tcp.c:3365 +msgid "# TCP service suspended" +msgstr "" + +#: src/transport/plugin_transport_tcp.c:3404 +msgid "# TCP service resumed" +msgstr "" -#: src/transport/plugin_transport_tcp.c:2451 +#: src/transport/plugin_transport_tcp.c:3415 +msgid "# network-level TCP disconnect events" +msgstr "# догађаји ТЦП мрежног нивоа прекидања везе" + +#: src/transport/plugin_transport_tcp.c:3721 msgid "Failed to start service.\n" msgstr "Нисам успео да покренем услугу.\n" -#: src/transport/plugin_transport_tcp.c:2547 +#: src/transport/plugin_transport_tcp.c:3873 #, c-format msgid "TCP transport listening on port %llu\n" msgstr "ТЦП пренос ослушкује на прикључнику %llu\n" -#: src/transport/plugin_transport_tcp.c:2551 +#: src/transport/plugin_transport_tcp.c:3877 msgid "TCP transport not listening on any port (client only)\n" msgstr "ТЦП пренос не ослушкује ни на једном прикључнику (само клијент)\n" -#: src/transport/plugin_transport_tcp.c:2554 +#: src/transport/plugin_transport_tcp.c:3880 #, c-format msgid "TCP transport advertises itself as being on port %llu\n" msgstr "ТЦП пренос упозорава себе да је на прикључнику %llu\n" -#: src/transport/plugin_transport_udp_broadcasting.c:167 -msgid "# IPv6 multicast HELLO beacons received via udp" +#: src/transport/plugin_transport_udp_broadcasting.c:169 +#, fuzzy +msgid "# Multicast HELLO beacons received via UDP" msgstr "# ИПв6 вишеодредишне „HELLO“ ознаке су примљене путем удп-а" -#: src/transport/plugin_transport_udp_broadcasting.c:210 -msgid "# IPv4 broadcast HELLO beacons received via udp" -msgstr "# ИПв4 свеодредишне „HELLO“ ознаке су примљене путем удп-а" - -#: src/transport/plugin_transport_udp_broadcasting.c:603 -msgid "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "Искључујем „HELLO“ емитовање због подешавања само пријатељ пријатељу!\n" +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" +"Искључујем „HELLO“ емитовање због подешавања само пријатељ пријатељу!\n" -#: src/transport/plugin_transport_udp_broadcasting.c:626 +#: src/transport/plugin_transport_udp_broadcasting.c:571 #, c-format msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "Нисам успео да поставим опцију ИПв4 емитовања за прикључницу емитовања на прикључнику %d\n" +msgstr "" +"Нисам успео да поставим опцију ИПв4 емитовања за прикључницу емитовања на " +"прикључнику %d\n" -#: src/transport/plugin_transport_udp.c:1513 +#: src/transport/plugin_transport_udp.c:3170 #, c-format -msgid "Trying to create session for address of unexpected length %u (should be %u or %u)\n" -msgstr "Покушавам да направим сесију за адресу неочекиване дужине %u (треба бити %u или %u)\n" +msgid "" +"UDP could not transmit message to `%s': Network seems down, please check " +"your network configuration\n" +msgstr "" +"УДП не може да пренесе поруку до „%s“: Изгледа да је мрежа пала, проверите " +"ваша мрежна подешавања\n" -#: src/transport/plugin_transport_udp.c:2602 -#, c-format -msgid "UDP could not transmit message to `%s': Network seems down, please check your network configuration\n" -msgstr "УДП не може да пренесе поруку до „%s“: Изгледа да је мрежа пала, проверите ваша мрежна подешавања\n" +#: src/transport/plugin_transport_udp.c:3183 +msgid "" +"UDP could not transmit IPv6 message! Please check your network configuration " +"and disable IPv6 if your connection does not have a global IPv6 address\n" +msgstr "" +"УДП не може да пренесе ИПв6 поруку! Проверите мрежна подешавања и искључите " +"ИПв6 ако ваша веза нема општу Ипв6 адресу\n" -#: src/transport/plugin_transport_udp.c:2616 -msgid "UDP could not transmit IPv6 message! Please check your network configuration and disable IPv6 if your connection does not have a global IPv6 address\n" -msgstr "УДП не може да пренесе ИПв6 поруку! Проверите мрежна подешавања и искључите ИПв6 ако ваша веза нема општу Ипв6 адресу\n" +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 +#, fuzzy, c-format +msgid "Failed to bind UDP socket to %s: %s\n" +msgstr "Нисам успео да отворим УДП прикључницу\n" + +#: src/transport/plugin_transport_udp.c:3480 +#, fuzzy +msgid "Disabling IPv4 since it is not supported on this system!\n" +msgstr "Искључујем ИПв6 јер није подржано на овом систему!\n" -#: src/transport/plugin_transport_udp.c:2961 +#: src/transport/plugin_transport_udp.c:3559 msgid "Failed to open UDP sockets\n" msgstr "Нисам успео да отворим УДП прикључницу\n" -#: src/transport/plugin_transport_udp.c:3056 -#, c-format -msgid "Given `%s' option is out of range: %llu > %u\n" -msgstr "Дата „%s“ опција је ван опсега: %llu > %u\n" +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 +msgid "must be in [0,65535]" +msgstr "" -#: src/transport/plugin_transport_udp.c:3097 -#, c-format -msgid "Invalid IPv6 address: `%s'\n" -msgstr "Неисправна ИПв6 адреса: „%s“\n" +#: src/transport/plugin_transport_udp.c:3667 +#, fuzzy +msgid "must be valid IPv4 address" +msgstr "Морате навести исправну ИПв4 адресу" + +#: src/transport/plugin_transport_udp.c:3689 +#, fuzzy +msgid "must be valid IPv6 address" +msgstr "Морате навести исправну ИПв6 адресу" -#: src/transport/plugin_transport_udp.c:3168 -msgid "Failed to create network sockets, plugin failed\n" +#: src/transport/plugin_transport_udp.c:3750 +#, fuzzy +msgid "Failed to create UDP network sockets\n" msgstr "Нисам успео да направим прикључнице мреже, прикључак није успео\n" -#: src/transport/plugin_transport_unix.c:1321 -#, c-format -msgid "Cannot create path to `%s'\n" +#: src/transport/plugin_transport_unix.c:1396 +#, fuzzy, c-format +msgid "Cannot bind to `%s'\n" msgstr "Не могу да направим путању до „%s“\n" -#: src/transport/plugin_transport_unix.c:1652 -msgid "No UNIXPATH given in configuration!\n" -msgstr "Није дата ЈУНИКС_ПУТАЊА у подешавањима!\n" - -#: src/transport/plugin_transport_unix.c:1688 +#: src/transport/plugin_transport_unix.c:1786 msgid "Failed to open UNIX listen socket\n" msgstr "Нисам успео да отворим ЈУНИКС прикључницу ослушкивања\n" -#: src/transport/plugin_transport_wlan.c:620 -msgid "# WLAN ACKs sent" +#: src/transport/plugin_transport_wlan.c:767 +#, fuzzy +msgid "# ACKs sent" msgstr "# „WLAN“ АЦК-ови су послати" -#: src/transport/plugin_transport_wlan.c:639 -msgid "# WLAN messages defragmented" -msgstr "# делићи „WLAN“ порука су уједињени" +#: src/transport/plugin_transport_wlan.c:787 +#, fuzzy +msgid "# Messages defragmented" +msgstr "# делићи порука су уједињени" -#: src/transport/plugin_transport_wlan.c:688 -#: src/transport/plugin_transport_wlan.c:772 -#: src/transport/plugin_transport_wlan.c:1948 -msgid "# WLAN sessions allocated" +#: src/transport/plugin_transport_wlan.c:828 +#: src/transport/plugin_transport_wlan.c:914 +#, fuzzy +msgid "# Sessions allocated" msgstr "# „WLAN“ сесије су додељене" -#: src/transport/plugin_transport_wlan.c:876 -msgid "# WLAN message fragments sent" +#: src/transport/plugin_transport_wlan.c:1037 +#, fuzzy +msgid "# message fragments sent" msgstr "# делићи „WLAN“ поруке су послати" -#: src/transport/plugin_transport_wlan.c:900 -msgid "# WLAN messages pending (with fragmentation)" +#: src/transport/plugin_transport_wlan.c:1066 +#, fuzzy +msgid "# messages pending (with fragmentation)" msgstr "# Поруке „WLAN“-а су на чекању (са расцепканошћу)" -#: src/transport/plugin_transport_wlan.c:1008 -#: src/transport/plugin_transport_wlan.c:1098 -#: src/transport/plugin_transport_wlan.c:1950 -msgid "# WLAN MAC endpoints allocated" +#: src/transport/plugin_transport_wlan.c:1195 +#: src/transport/plugin_transport_wlan.c:1287 +#: src/transport/plugin_transport_wlan.c:2324 +#, fuzzy +msgid "# MAC endpoints allocated" msgstr "# Крајње тачке „WLAN“ МАЦ-а су додељене" -#: src/transport/plugin_transport_wlan.c:1302 -msgid "# HELLO messages received via WLAN" -msgstr "# „HELLO“ поруке су примљене путем „WLAN“-а" - -#: src/transport/plugin_transport_wlan.c:1326 -msgid "# fragments received via WLAN" -msgstr "# делићи су примљени путем „WLAN“-а" - -#: src/transport/plugin_transport_wlan.c:1336 -msgid "# ACKs received via WLAN" +#: src/transport/plugin_transport_wlan.c:1573 +#, fuzzy +msgid "# ACKs received" msgstr "# АЦК-ови су примљени путем „WLAN“-а" -#: src/transport/plugin_transport_wlan.c:1396 -msgid "# WLAN DATA messages discarded due to CRC32 error" +#: src/transport/plugin_transport_wlan.c:1645 +#, fuzzy +msgid "# DATA messages discarded due to CRC32 error" msgstr "# Поруке ПОДАТАКА „WLAN“ су одбачене услед „CRC32“ грешке" -#: src/transport/plugin_transport_wlan.c:1518 -msgid "# DATA messages received via WLAN" -msgstr "# поруке ПОДАТАКА су примљене путем „WLAN“-а" - -#: src/transport/plugin_transport_wlan.c:1553 -msgid "# WLAN DATA messages processed" -msgstr "# Поруке „WLAN“ ПОДАТАКА су обрађене" - -#: src/transport/plugin_transport_wlan.c:1616 -msgid "# HELLO beacons sent via WLAN" +#: src/transport/plugin_transport_wlan.c:1752 +#, fuzzy +msgid "# HELLO beacons sent" msgstr "# „HELLO“ ознаке су послате путем „WLAN“—а" -#: src/transport/plugin_transport_wlan.c:1729 -msgid "WLAN address with invalid size encountered\n" -msgstr "Наишли смо на адресу „WLAN“ са неисправном величином\n" +#: src/transport/plugin_transport_wlan.c:1869 +#, fuzzy +msgid "# DATA messages received" +msgstr "# поруке ЈАЗ СТАВИ су примљене" + +#: src/transport/plugin_transport_wlan.c:1903 +#, fuzzy +msgid "# DATA messages processed" +msgstr "# Поруке „WLAN“ ПОДАТАКА су обрађене" -#: src/transport/plugin_transport_wlan.c:1929 +#: src/transport/plugin_transport_wlan.c:2299 #, c-format msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n" msgstr "Извршна помоћника „%s“ није СУИБ, не могу да покренем „WLAN“ пренос\n" -#: src/transport/transport_api.c:739 -#, c-format -msgid "Received unexpected message of type %u in %s:%u\n" -msgstr "Примих неочекивану поруку врсте %u у %s:%u\n" - -#: src/transport/transport-testing.c:584 -msgid "Failed to initialize testing library!\n" -msgstr "Нисам успео да покренем библиотеку тестирања!\n" +#: src/transport/plugin_transport_wlan.c:2321 +#, fuzzy +msgid "# sessions allocated" +msgstr "# „WLAN“ сесије су додељене" -#: src/tun/regex.c:129 +#: src/transport/tcp_connection_legacy.c:440 #, c-format -msgid "Bad mask: %d\n" -msgstr "Лоша маска: %d\n" +msgid "Access denied to `%s'\n" +msgstr "Приступ је збрањен за „%s“\n" -#: src/util/bio.c:170 src/util/bio.c:178 +#: src/transport/tcp_connection_legacy.c:455 #, c-format -msgid "Error reading `%s': %s" -msgstr "Грешка при читању „%s“: %s" - -#: src/util/bio.c:180 -msgid "End of file" -msgstr "Крај датотеке" +msgid "Accepting connection from `%s': %p\n" +msgstr "Прихватам везу са „%s“: %p\n" -#: src/util/bio.c:237 +#: src/transport/tcp_server_legacy.c:478 src/util/service.c:1396 #, c-format -msgid "Error reading length of string `%s'" -msgstr "Грешка читања дужине ниске „%s“" +msgid "`%s' failed for port %d (%s).\n" +msgstr "„%s“ није успело за прикључник %d (%s).\n" -#: src/util/bio.c:247 +#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1408 #, c-format -msgid "String `%s' longer than allowed (%u > %u)" -msgstr "Ниска „%s“ је дужа од дозвољеног (%u > %u)" +msgid "`%s' failed for port %d (%s): address already in use\n" +msgstr "„%s“ није успело за прикључник %d (%s): адреса је већ у употреби\n" -#: src/util/bio.c:293 +#: src/transport/tcp_server_legacy.c:494 src/util/service.c:1415 #, c-format -msgid "Serialized metadata `%s' larger than allowed (%u>%u)" -msgstr "Серијализовани метаподаци „%s“ су већи од дозвољеног (%u>%u)" +msgid "`%s' failed for `%s': address already in use\n" +msgstr "„%s“ није успело за „%s“: адреса је већ у употреби\n" -#: src/util/bio.c:307 +#: src/transport/tcp_server_legacy.c:897 #, c-format -msgid "Metadata `%s' failed to deserialize" -msgstr "Метаподаци „%s“ нису успели да се десеријализују" +msgid "" +"Processing code for message of type %u did not call " +"`GNUNET_SERVER_receive_done' after %s\n" +msgstr "" +"Обрађивачки код за поруку врсте %u није позвао „GNUNET_SERVER_receive_done“ " +"након „%s“\n" -#: src/util/client.c:261 src/util/client.c:858 src/util/service.c:619 +#: src/transport/tcp_service_legacy.c:345 src/util/service.c:833 #, c-format -msgid "UNIXPATH `%s' too long, maximum length is %llu\n" -msgstr "ЈУНИКС_ПУТАЊА „%s“ је предуга, највећа дужина је %llu\n" +msgid "Unknown address family %d\n" +msgstr "Непозната породица адресе „%d“\n" -#: src/util/client.c:265 src/util/client.c:863 src/util/service.c:623 +#: src/transport/tcp_service_legacy.c:352 #, c-format -msgid "Using `%s' instead\n" -msgstr "Користим зато „%s“\n" +msgid "Access from `%s' denied to service `%s'\n" +msgstr "Приступ из „%s“ је забрањен за услугу „%s“\n" -#: src/util/client.c:360 +#: src/transport/tcp_service_legacy.c:410 src/util/service.c:946 #, c-format -msgid "Could not determine valid hostname and port for service `%s' from configuration.\n" -msgstr "Не могу да одредим исправан назив доамћина и прикључник за услугу „%s“ из подешавања.\n" +msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n" +msgstr "Не могу да обрадим спецификацију ИПв4 мреже „%s“ за `%s:%s'\n" -#: src/util/client.c:368 +#: src/transport/tcp_service_legacy.c:451 src/util/service.c:987 #, c-format -msgid "Need a non-empty hostname for service `%s'.\n" -msgstr "Потребан је не-празан назив домаћина за услугу „%s“.\n" +msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n" +msgstr "Не могу да обрадим спецификацију ИПв6 мреже „%s“ за `%s:%s'\n" -#: src/util/client.c:1008 +#: src/transport/tcp_service_legacy.c:890 +#: src/transport/tcp_service_legacy.c:910 src/util/service.c:1476 #, c-format -msgid "Could not connect to service `%s', configuration broken.\n" -msgstr "Не могу да се повежем на услугу „%s“, подешавање је оштећено.\n" +msgid "Specified value for `%s' of service `%s' is invalid\n" +msgstr "Наведена вредност за „%s“ услуге „%s“ је неисправна\n" -#: src/util/client.c:1020 +#: src/transport/tcp_service_legacy.c:935 src/util/service.c:1500 #, c-format -msgid "Failure to transmit request to service `%s'\n" -msgstr "Нисам успео да пренесем захтев услузи „%s“\n" +msgid "Could not access pre-bound socket %u, will try to bind myself\n" +msgstr "" +"Не могу да приступим унапред свезаној прикључници %u, покушаћу да свежем " +"себе самог\n" -#: src/util/client.c:1303 -msgid "Could not submit request, not expecting to receive a response.\n" -msgstr "Не могу да предам захтев, не очекујем да примим одговор.\n" +#: src/transport/tcp_service_legacy.c:1100 +#, c-format +msgid "Failed to start `%s' at `%s'\n" +msgstr "Нисам успео да покренем „%s“ на „%s“\n" -#: src/util/common_logging.c:254 src/util/common_logging.c:1039 +#: src/transport/tcp_service_legacy.c:1142 +#, c-format +msgid "Service `%s' runs at %s\n" +msgstr "Услуга „%s“ ради на „%s“\n" + +#: src/transport/tcp_service_legacy.c:1193 src/util/service.c:1746 +msgid "Service process failed to initialize\n" +msgstr "Процес услуге није успео да се покрене\n" + +#: src/transport/tcp_service_legacy.c:1198 src/util/service.c:1751 +msgid "Service process could not initialize server function\n" +msgstr "Процес услуге не може да покрене функцију сервера\n" + +#: src/transport/tcp_service_legacy.c:1203 src/util/service.c:1756 +msgid "Service process failed to report status\n" +msgstr "Процес услуге није успео да извести о стању\n" + +#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1176 +#: src/util/service.c:1637 +#, c-format +msgid "Cannot obtain information about user `%s': %s\n" +msgstr "Не могу да добијем податке о кориснику „%s“: %s\n" + +#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:1639 +msgid "No such user" +msgstr "Нема таквог корисника" + +#: src/transport/tcp_service_legacy.c:1269 src/util/service.c:1653 +#, c-format +msgid "Cannot change user/group to `%s': %s\n" +msgstr "Не могу да променим власника/групу на „%s“: %s\n" + +#: src/transport/tcp_service_legacy.c:1348 src/util/service.c:1996 +msgid "do daemonize (detach from terminal)" +msgstr "ради демонизацију (откачиње од терминала)" + +#: src/transport/tcp_service_legacy.c:1397 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 +#: src/util/service.c:2084 +#, c-format +msgid "Malformed configuration file `%s', exit ...\n" +msgstr "Лоша датотека подешавања „%s“, излазим ...\n" + +#: src/transport/tcp_service_legacy.c:1407 src/util/service.c:2094 +msgid "Malformed configuration, exit ...\n" +msgstr "Лоше подешавање, излазим ...\n" + +#: src/transport/tcp_service_legacy.c:1412 +#, c-format +msgid "Could not access configuration file `%s'\n" +msgstr "Не могу да приступим датотеци подешавања „%s“\n" + +#: src/transport/transport_api2_communication.c:743 +msgid "Dropped backchanel message: handler not provided by communicator\n" +msgstr "" + +#: src/util/bio.c:227 src/util/bio.c:235 +#, fuzzy, c-format +msgid "Error reading `%s' from file: %s" +msgstr "Грешка при читању „%s“: %s" + +#: src/util/bio.c:237 +msgid "End of file" +msgstr "Крај датотеке" + +#: src/util/bio.c:266 +#, fuzzy, c-format +msgid "Error while reading `%s' from buffer: %s" +msgstr "Грешка при читању „%s“: %s" + +#: src/util/bio.c:268 +msgid "Not enough data left" +msgstr "" + +#: src/util/bio.c:308 +#, fuzzy, c-format +msgid "Invalid handle type while reading `%s'" +msgstr "Неисправан аргумент линије наредби „%s“\n" + +#: src/util/bio.c:335 src/util/bio.c:839 +msgid "string length" +msgstr "" + +#: src/util/bio.c:341 +#, c-format +msgid "%s (while reading `%s')" +msgstr "" + +#: src/util/bio.c:346 +#, c-format +msgid "Error reading length of string `%s'" +msgstr "Грешка читања дужине ниске „%s“" + +#: src/util/bio.c:359 +#, fuzzy, c-format +msgid "String `%s' longer than allowed (%u > %lu)" +msgstr "Ниска „%s“ је дужа од дозвољеног (%u > %u)" + +#: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 +msgid "metadata length" +msgstr "" + +#: src/util/bio.c:410 +#, fuzzy, c-format +msgid "Serialized metadata `%s' larger than allowed (%u > %u)" +msgstr "Серијализовани метаподаци „%s“ су већи од дозвољеног (%u>%u)" + +#: src/util/bio.c:426 +#, fuzzy, c-format +msgid "Failed to deserialize metadata `%s'" +msgstr "Нисам успео да серијализујем НС запис са вредношћу „%s“\n" + +#: src/util/bio.c:668 +msgid "Unable to flush buffer to file" +msgstr "" + +#: src/util/bio.c:730 src/util/bio.c:751 +#, fuzzy, c-format +msgid "Error while writing `%s' to file: %s" +msgstr "Грешка писања „HELLO“-а у датотеку „%s“: %s\n" + +#: src/util/bio.c:732 +msgid "No associated file" +msgstr "" + +#: src/util/bio.c:816 +#, fuzzy, c-format +msgid "Invalid handle type while writing `%s'" +msgstr "Неисправан формат времена „%s“\n" + +#: src/util/bio.c:876 +#, fuzzy, c-format +msgid "Failed to serialize metadata `%s'" +msgstr "Нисам успео да серијализујем НС запис са вредношћу „%s“\n" + +#: src/util/client.c:747 src/util/client.c:937 +msgid "not a valid filename" +msgstr "" + +#: src/util/client.c:1103 +#, c-format +msgid "Need a non-empty hostname for service `%s'.\n" +msgstr "Потребан је не-празан назив домаћина за услугу „%s“.\n" + +#: src/util/common_logging.c:259 src/util/common_logging.c:1114 msgid "DEBUG" msgstr "ПРОЧИШЋАВАЊЕ" -#: src/util/common_logging.c:256 src/util/common_logging.c:1037 +#: src/util/common_logging.c:261 src/util/common_logging.c:1112 msgid "INFO" msgstr "ПОДАЦИ" -#: src/util/common_logging.c:258 src/util/common_logging.c:1035 +#: src/util/common_logging.c:263 src/util/common_logging.c:1110 +msgid "MESSAGE" +msgstr "" + +#: src/util/common_logging.c:265 src/util/common_logging.c:1108 msgid "WARNING" msgstr "УПОЗОРЕЊЕ" -#: src/util/common_logging.c:260 src/util/common_logging.c:1033 +#: src/util/common_logging.c:267 src/util/common_logging.c:1106 msgid "ERROR" msgstr "ГРЕШКА" -#: src/util/common_logging.c:262 src/util/common_logging.c:1041 +#: src/util/common_logging.c:269 src/util/common_logging.c:1116 msgid "NONE" msgstr "НИШТА" -#: src/util/common_logging.c:391 +#: src/util/common_logging.c:626 src/util/common_logging.c:665 #, c-format -msgid "Failed to create or access directory for log file `%s'\n" -msgstr "Нисам успео да направим или да приступим директоријуму да забележим датотеку „%s“\n" +msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" +msgstr "" -#: src/util/common_logging.c:817 +#: src/util/common_logging.c:904 #, c-format msgid "Message `%.*s' repeated %u times in the last %s\n" msgstr "Порука „%.*s“ је поновљена %u пута у прошлости %s\n" -#: src/util/common_logging.c:1042 +#: src/util/common_logging.c:1117 msgid "INVALID" msgstr "НЕИСПРАВНО" -#: src/util/common_logging.c:1157 +#: src/util/common_logging.c:1398 msgid "unknown address" msgstr "непозната адреса" -#: src/util/common_logging.c:1196 +#: src/util/common_logging.c:1443 msgid "invalid address" msgstr "неисправна адреса" -#: src/util/common_logging.c:1214 +#: src/util/common_logging.c:1462 #, c-format msgid "Configuration fails to specify option `%s' in section `%s'!\n" msgstr "Подешавање није успело да наведе опцију „%s“ у одељку „%s“!\n" -#: src/util/common_logging.c:1235 +#: src/util/common_logging.c:1485 #, c-format -msgid "Configuration specifies invalid value for option `%s' in section `%s': %s\n" -msgstr "Подешавање наводи неисправну вредност за опцију „%s“ у одељку „%s“: %s\n" +msgid "" +"Configuration specifies invalid value for option `%s' in section `%s': %s\n" +msgstr "" +"Подешавање наводи неисправну вредност за опцију „%s“ у одељку „%s“: %s\n" -#: src/util/configuration.c:288 +#: src/util/configuration.c:402 #, c-format msgid "Syntax error while deserializing in line %u\n" msgstr "Грешка синтаксе приликом десеријализације у реду %u\n" -#: src/util/configuration.c:996 +#: src/util/configuration.c:460 +#, fuzzy, c-format +msgid "Error while reading file `%s'\n" +msgstr "Грешка отварања датотеке „%s“: %s\n" + +#: src/util/configuration.c:1063 +msgid "Not a valid relative time specification" +msgstr "" + +#: src/util/configuration.c:1154 #, c-format -msgid "Configuration value '%s' for '%s' in section '%s' is not in set of legal choices\n" -msgstr "Вредност подешавања '%s' за '%s' у одељку '%s' није ус купу исправних избора\n" +msgid "" +"Configuration value '%s' for '%s' in section '%s' is not in set of legal " +"choices\n" +msgstr "" +"Вредност подешавања '%s' за '%s' у одељку '%s' није ус купу исправних " +"избора\n" -#: src/util/configuration.c:1066 +#: src/util/configuration.c:1269 #, c-format msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" msgstr "Сумња се на дубинско ширење, прекидам $-ширење за термин „%s“\n" -#: src/util/configuration.c:1098 +#: src/util/configuration.c:1301 #, c-format msgid "Missing closing `%s' in option `%s'\n" msgstr "Недостаје затварење „%s“ у опцији „%s“\n" -#: src/util/configuration.c:1172 +#: src/util/configuration.c:1367 #, c-format -msgid "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined as an environmental variable\n" -msgstr "Нисам успео да раширим „%s“ у „%s“ јер нисам нашао у [ПУТАЊАМА] нити је дефинисано као променљива окружења\n" - -#: src/util/connection.c:423 -#, c-format -msgid "Access denied to `%s'\n" -msgstr "Приступ је збрањен за „%s“\n" - -#: src/util/connection.c:438 -#, c-format -msgid "Accepting connection from `%s': %p\n" -msgstr "Прихватам везу са „%s“: %p\n" - -#: src/util/connection.c:553 -#, c-format -msgid "Failed to establish TCP connection to `%s:%u', no further addresses to try.\n" -msgstr "Нисам успео да успоставим ТЦП везу са `%s:%u', нема будућих адреса за покушавање.\n" - -#: src/util/connection.c:751 src/util/connection.c:919 -#, c-format -msgid "Trying to connect to `%s' (%p)\n" -msgstr "Покушавам да се повежем на „%s“ (%p)\n" - -#: src/util/connection.c:910 -#, c-format -msgid "Attempt to connect to `%s' failed\n" -msgstr "Покушај повезивања са „%s“ није успео\n" +msgid "" +"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " +"as an environmental variable\n" +msgstr "" +"Нисам успео да раширим „%s“ у „%s“ јер нисам нашао у [ПУТАЊАМА] нити је " +"дефинисано као променљива окружења\n" -#: src/util/container_bloomfilter.c:531 +#: src/util/container_bloomfilter.c:553 #, c-format -msgid "Size of file on disk is incorrect for this Bloom filter (want %llu, have %llu)\n" -msgstr "Величина датотеке на диску није тачна за овај Блум филтер (желим %llu, имам %llu)\n" +msgid "" +"Size of file on disk is incorrect for this Bloom filter (want %llu, have " +"%llu)\n" +msgstr "" +"Величина датотеке на диску није тачна за овај Блум филтер (желим %llu, имам " +"%llu)\n" -#: src/util/crypto_ecc.c:702 src/util/crypto_ecc.c:740 -#: src/util/crypto_ecc.c:858 src/util/crypto_ecc.c:896 +#: src/util/crypto_ecc.c:663 #, c-format -msgid "Could not acquire lock on file `%s': %s...\n" -msgstr "Не могу да остварим закључавање на датотеци „%s“: %s...\n" - -#: src/util/crypto_ecc.c:707 src/util/crypto_ecc.c:863 -msgid "Creating a new private key. This may take a while.\n" -msgstr "Стварам нови лични кључ. Ово може потрајати.\n" - -#: src/util/crypto_ecc.c:744 src/util/crypto_ecc.c:900 -msgid "This may be ok if someone is currently generating a private key.\n" -msgstr "Ово може бити у реду ако неко тренутно ствара лични кључ.\n" +msgid "ECC signing failed at %s:%d: %s\n" +msgstr "„ECC“ потписивање није успело на %s:%d: %s\n" -#: src/util/crypto_ecc.c:774 src/util/crypto_ecc.c:930 +#: src/util/crypto_ecc.c:791 #, c-format -msgid "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" -msgstr "Приликом покушаја читања датотеке кључа „%s“ нађох %u бајта али ми треба барем %u.\n" - -#: src/util/crypto_ecc.c:778 src/util/crypto_ecc.c:934 -msgid "This may be ok if someone is currently generating a key.\n" -msgstr "Ово може бити у реду ако неко тренутно ствара кључ.\n" +msgid "ECDSA signature verification failed at %s:%d: %s\n" +msgstr "Провера „ECDSA“ потписа није успела на %s:%d: %s\n" -#: src/util/crypto_ecc.c:1016 +#: src/util/crypto_ecc_setup.c:369 msgid "Could not load peer's private key\n" msgstr "Не могу да учитам лични кључ парњака\n" -#: src/util/crypto_ecc.c:1120 +#: src/util/crypto_random.c:345 #, c-format -msgid "ECC signing failed at %s:%d: %s\n" -msgstr "„ECC“ потписивање није успело на %s:%d: %s\n" +msgid "libgcrypt has not the expected version (version %s is required).\n" +msgstr "„libgcrypt“ није очекиваног издања (издање %s је потребно).\n" -#: src/util/crypto_ecc.c:1170 -#, c-format -msgid "EdDSA signing failed at %s:%d: %s\n" +#: src/util/crypto_rsa.c:959 +#, fuzzy, c-format +msgid "RSA signing failed at %s:%d: %s\n" msgstr "„EdDSA“ потписивање није успело на %s:%d: %s\n" -#: src/util/crypto_ecc.c:1244 -#, c-format -msgid "ECDSA signature verification failed at %s:%d: %s\n" +#: src/util/crypto_rsa.c:1318 +#, fuzzy, c-format +msgid "RSA signature verification failed at %s:%d: %s\n" msgstr "Провера „ECDSA“ потписа није успела на %s:%d: %s\n" -#: src/util/crypto_ecc.c:1301 +#: src/util/disk.c:940 #, c-format -msgid "EdDSA signature verification failed at %s:%d: %s\n" -msgstr "Провера „EdDSA“ потписа није успела на %s:%d: %s\n" +msgid "Expected `%s' to be a directory!\n" +msgstr "Очекивах да „%s“ буде директоријум!\n" -#: src/util/crypto_random.c:284 +#: src/util/dnsparser.c:910 #, c-format -msgid "libgcrypt has not the expected version (version %s is required).\n" -msgstr "„libgcrypt“ није очекиваног издања (издање %s је потребно).\n" +msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n" +msgstr "Нисам успео да претворим УТФ-8 назив „%s“ у ДНС ИДНА формат: %s\n" -#: src/util/disk.c:1184 +#: src/util/dnsstub.c:227 #, c-format -msgid "Expected `%s' to be a directory!\n" -msgstr "Очекивах да „%s“ буде директоријум!\n" +msgid "Could not bind to any port: %s\n" +msgstr "Не могу да се вежем ни за један прикључник: %s\n" -#: src/util/disk.c:1546 src/util/service.c:1318 +#: src/util/dnsstub.c:344 #, c-format -msgid "Cannot obtain information about user `%s': %s\n" -msgstr "Не могу да добијем податке о кориснику „%s“: %s\n" +msgid "Received DNS response that is too small (%u bytes)" +msgstr "Примих ДНС одговор који је премали (%u бајта)" + +#: src/util/dnsstub.c:482 +#, fuzzy, c-format +msgid "Failed to send DNS request to %s: %s\n" +msgstr "Нисам успео да пошаљем ДНС захтев за %s\n" -#: src/util/getopt.c:568 +#: src/util/dnsstub.c:487 +#, c-format +msgid "Sent DNS request to %s\n" +msgstr "Послао сам ДНС захтев за %s\n" + +#: src/util/getopt.c:565 #, c-format msgid "%s: option `%s' is ambiguous\n" msgstr "%s: опција „%s“ је нејасна\n" -#: src/util/getopt.c:592 +#: src/util/getopt.c:590 #, c-format msgid "%s: option `--%s' does not allow an argument\n" msgstr "%s: опција „--%s“ не дозвољава аргумент\n" -#: src/util/getopt.c:597 +#: src/util/getopt.c:596 #, c-format msgid "%s: option `%c%s' does not allow an argument\n" msgstr "%s: опција „%c%s“ не дозвољава аргумент\n" -#: src/util/getopt.c:614 src/util/getopt.c:781 +#: src/util/getopt.c:616 src/util/getopt.c:797 #, c-format msgid "%s: option `%s' requires an argument\n" msgstr "%s: опција „%s“ захтева аргумент\n" -#: src/util/getopt.c:643 +#: src/util/getopt.c:647 #, c-format msgid "%s: unrecognized option `--%s'\n" msgstr "%s: непрепозната опција „--%s“\n" -#: src/util/getopt.c:647 +#: src/util/getopt.c:653 #, c-format msgid "%s: unrecognized option `%c%s'\n" msgstr "%s: непрепозната опција „%c%s“\n" -#: src/util/getopt.c:672 +#: src/util/getopt.c:680 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: недозвољена опција —— %c\n" -#: src/util/getopt.c:674 +#: src/util/getopt.c:682 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: неисправна опција —— %c\n" -#: src/util/getopt.c:702 src/util/getopt.c:829 +#: src/util/getopt.c:711 src/util/getopt.c:847 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: опција захтева аргумент —— %c\n" -#: src/util/getopt.c:750 +#: src/util/getopt.c:761 #, c-format msgid "%s: option `-W %s' is ambiguous\n" msgstr "%s: опција „-W %s“ је нејасна\n" -#: src/util/getopt.c:768 +#: src/util/getopt.c:781 #, c-format msgid "%s: option `-W %s' does not allow an argument\n" msgstr "%s: опција „-W %s“ не дозвољава аргумент\n" -#: src/util/getopt.c:933 +#: src/util/getopt.c:974 #, c-format msgid "Use %s to get a list of options.\n" msgstr "Употребите „%s“ да добавите списак опција.\n" -#: src/util/getopt_helpers.c:84 +#: src/util/getopt.c:986 +#, fuzzy, c-format +msgid "Option `%s' can't be used with other options.\n" +msgstr "Опција „%s“ нема смисла без опције „%s“.\n" + +#: src/util/getopt.c:998 +#, fuzzy, c-format +msgid "Missing mandatory option `%s'.\n" +msgstr "Недостаје опција „%s“ за радњу „%s“\n" + +#: src/util/getopt_helpers.c:69 +msgid "print the version number" +msgstr "" + +#: src/util/getopt_helpers.c:116 #, c-format -msgid "Arguments mandatory for long options are also mandatory for short options.\n" -msgstr "Аргументи обавезни за дуге опције су такође обавезни за кратке опције.\n" +msgid "" +"Arguments mandatory for long options are also mandatory for short options.\n" +msgstr "" +"Аргументи обавезни за дуге опције су такође обавезни за кратке опције.\n" + +#: src/util/getopt_helpers.c:208 +msgid "print this help" +msgstr "" -#: src/util/getopt_helpers.c:268 src/util/getopt_helpers.c:326 +#: src/util/getopt_helpers.c:288 +msgid "be verbose" +msgstr "" + +#: src/util/getopt_helpers.c:429 +msgid "configure logging to use LOGLEVEL" +msgstr "" + +#: src/util/getopt_helpers.c:510 +msgid "configure logging to write logs to FILENAME" +msgstr "" + +#: src/util/getopt_helpers.c:532 +#, fuzzy +msgid "use configuration file FILENAME" +msgstr "ствара јединствене датотеке подешавања" + +#: src/util/getopt_helpers.c:568 src/util/getopt_helpers.c:859 +#: src/util/getopt_helpers.c:924 #, c-format msgid "You must pass a number to the `%s' option.\n" msgstr "Морате да проследите број опцији „%s“.\n" -#: src/util/getopt_helpers.c:298 +#: src/util/getopt_helpers.c:649 +#, fuzzy, c-format +msgid "" +"You must pass a relative time (optionally with sign) to the `%s' option.\n" +msgstr "Морате да проследите релативно време опцији „%s“.\n" + +#: src/util/getopt_helpers.c:656 +#, c-format +msgid "Value given for time travel `%s' option is too big.\n" +msgstr "" + +#: src/util/getopt_helpers.c:683 +msgid "[+/-]MICROSECONDS" +msgstr "" + +#: src/util/getopt_helpers.c:685 +msgid "modify system time by given offset (for debugging/testing only)" +msgstr "" + +#: src/util/getopt_helpers.c:720 #, c-format msgid "You must pass relative time to the `%s' option.\n" msgstr "Морате да проследите релативно време опцији „%s“.\n" -#: src/util/gnunet-config.c:90 +#: src/util/getopt_helpers.c:785 +#, fuzzy, c-format +msgid "You must pass absolute time to the `%s' option.\n" +msgstr "Морате да проследите релативно време опцији „%s“.\n" + +#: src/util/getopt_helpers.c:852 +#, c-format +msgid "Your input for the '%s' option has to be a non negative number\n" +msgstr "" + +#: src/util/getopt_helpers.c:931 +#, fuzzy, c-format +msgid "You must pass a number below %u to the `%s' option.\n" +msgstr "Морате да проследите број опцији „%s“.\n" + +#: src/util/getopt_helpers.c:1018 #, c-format -msgid "--section argument is required\n" +msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" +msgstr "" + +#: src/util/gnunet-config.c:167 +#, fuzzy, c-format +msgid "failed to load configuration defaults" +msgstr "Нисам успео да учитам подешавање за „%s“\n" + +#: src/util/gnunet-config.c:179 +#, fuzzy, c-format +msgid "%s or %s argument is required\n" msgstr "аргумент „--section“ је потребан\n" -#: src/util/gnunet-config.c:133 +#: src/util/gnunet-config.c:186 +#, c-format +msgid "The following sections are available:\n" +msgstr "" + +#: src/util/gnunet-config.c:234 #, c-format msgid "--option argument required to set value\n" msgstr "аргумент „--option“ је потребан за постављање вредности\n" -#: src/util/gnunet-config.c:160 -msgid "obtain option of value as a filename (with $-expansion)" +#: src/util/gnunet-config.c:284 +#, fuzzy +msgid "interpret option value as a filename (with $-expansion)" msgstr "добија опцију вредности као назив датотеке (са $-ширењем)" -#: src/util/gnunet-config.c:163 +#: src/util/gnunet-config.c:291 +msgid "test if the current installation supports the specified BACKEND" +msgstr "" + +#: src/util/gnunet-config.c:297 msgid "name of the section to access" msgstr "назив одељка за приступање" -#: src/util/gnunet-config.c:166 +#: src/util/gnunet-config.c:302 msgid "name of the option to access" msgstr "назив опције за приступање" -#: src/util/gnunet-config.c:169 +#: src/util/gnunet-config.c:307 msgid "value to set" msgstr "вредност за постављање" -#: src/util/gnunet-config.c:178 +#: src/util/gnunet-config.c:312 +#, fuzzy +msgid "print available configuration sections" +msgstr "Недостају поставке подешавања кључа.\n" + +#: src/util/gnunet-config.c:318 +msgid "write configuration file that only contains delta to defaults" +msgstr "" + +#: src/util/gnunet-config.c:330 msgid "Manipulate GNUnet configuration files" msgstr "Управља ГНУнет датотекама подешавања" -#: src/util/gnunet-ecc.c:75 +#: src/util/gnunet-ecc.c:94 #, c-format msgid "Failed to open `%s': %s\n" msgstr "Нисам успео да отворим „%s“: %s\n" -#: src/util/gnunet-ecc.c:81 +#: src/util/gnunet-ecc.c:128 +#, fuzzy, c-format +msgid "Generating %u keys like %s, please wait" +msgstr "Стварам %u кључа, сачекајте" + +#: src/util/gnunet-ecc.c:136 #, c-format msgid "Generating %u keys, please wait" msgstr "Стварам %u кључа, сачекајте" -#: src/util/gnunet-ecc.c:97 +#: src/util/gnunet-ecc.c:177 #, c-format msgid "" "\n" @@ -7644,7 +8706,7 @@ msgstr "" "\n" "Нисам успео да пишем у „%s“: %s\n" -#: src/util/gnunet-ecc.c:107 +#: src/util/gnunet-ecc.c:184 #, c-format msgid "" "\n" @@ -7653,7 +8715,7 @@ msgstr "" "\n" "Завршено!\n" -#: src/util/gnunet-ecc.c:110 +#: src/util/gnunet-ecc.c:186 #, c-format msgid "" "\n" @@ -7662,167 +8724,186 @@ msgstr "" "\n" "Грешка, %u кључа нису створена\n" -#: src/util/gnunet-ecc.c:199 +#: src/util/gnunet-ecc.c:303 #, c-format msgid "Hostkeys file `%s' not found\n" msgstr "Нисам нашао датотеку кључа домаћина „%s“\n" -#: src/util/gnunet-ecc.c:210 +#: src/util/gnunet-ecc.c:313 #, c-format msgid "Hostkeys file `%s' is empty\n" msgstr "Датотека кључа домаћина „%s“ је празна\n" -#: src/util/gnunet-ecc.c:232 +#: src/util/gnunet-ecc.c:333 #, c-format msgid "Could not read hostkey file: %s\n" msgstr "Не могу да прочитам датотеку кључа домаћина: %s\n" -#: src/util/gnunet-ecc.c:283 +#: src/util/gnunet-ecc.c:387 msgid "No hostkey file specified on command line\n" msgstr "Није наведена датотека кључа домаћина на линији наредби\n" -#: src/util/gnunet-ecc.c:349 +#: src/util/gnunet-ecc.c:451 msgid "list keys included in a file (for testing)" msgstr "исписује кључеве укључене у датотеци (за тестирање)" -#: src/util/gnunet-ecc.c:352 +#: src/util/gnunet-ecc.c:457 msgid "number of keys to list included in a file (for testing)" msgstr "број кључева за испис укључених у датотеци (за тестирање)" -#: src/util/gnunet-ecc.c:355 +#: src/util/gnunet-ecc.c:463 msgid "create COUNT public-private key pairs (for testing)" msgstr "ствара БРОЈ пара јавног-личног кључа (за тестирање)" -#: src/util/gnunet-ecc.c:358 +#: src/util/gnunet-ecc.c:468 msgid "print the public key in ASCII format" msgstr "исписује јавни кључ у АСКРИ формату" -#: src/util/gnunet-ecc.c:361 -msgid "print the hash of the public key in ASCII format" -msgstr "исписује хеш јавног кључа у АСКРИ формату" +#: src/util/gnunet-ecc.c:473 +#, fuzzy +msgid "print the private key in ASCII format" +msgstr "исписује јавни кључ у АСКРИ формату" + +#: src/util/gnunet-ecc.c:478 +#, fuzzy +msgid "print the public key in HEX format" +msgstr "исписује јавни кључ у АСКРИ формату" -#: src/util/gnunet-ecc.c:364 +#: src/util/gnunet-ecc.c:484 msgid "print examples of ECC operations (used for compatibility testing)" msgstr "исписује примере ЕЦЦ операција (користи се за тестирање сагласности)" -#: src/util/gnunet-ecc.c:375 +#: src/util/gnunet-ecc.c:498 msgid "Manipulate GNUnet private ECC key files" msgstr "Управља ГНУнет датотекама личног ЕЦЦ кључа" -#: src/util/gnunet-resolver.c:149 +#: src/util/gnunet-qr.c:145 src/util/gnunet-uri.c:94 +#, c-format +msgid "Invalid URI: does not start with `%s'\n" +msgstr "Неисправна путања: не почиње са „%s“\n" + +#: src/util/gnunet-qr.c:152 src/util/gnunet-uri.c:101 +#, c-format +msgid "Invalid URI: fails to specify subsystem\n" +msgstr "Неисправна путања: није успело навођење подсистема\n" + +#: src/util/gnunet-qr.c:159 src/util/gnunet-uri.c:108 +#, c-format +msgid "No handler known for subsystem `%s'\n" +msgstr "Није познат руковалац за подсистем „%s“\n" + +#: src/util/gnunet-qr.c:357 +msgid "use video-device DEVICE (default: /dev/video0" +msgstr "" + +#: src/util/gnunet-qr.c:362 +msgid "do not show preview windows" +msgstr "" + +#: src/util/gnunet-qr.c:372 +msgid "Scan a QR code using a video device and import the uri read" +msgstr "" + +#: src/util/gnunet-resolver.c:168 msgid "perform a reverse lookup" msgstr "обавља повратну претрагу" -#: src/util/gnunet-resolver.c:160 +#: src/util/gnunet-resolver.c:182 msgid "Use build-in GNUnet stub resolver" msgstr "Користи уграђеног заменског решавача ГНУнет-а" -#: src/util/gnunet-scrypt.c:279 +#: src/util/gnunet-scrypt.c:229 +#, c-format +msgid "Loading hostkey from `%s' failed.\n" +msgstr "Учитавање кључа домаћина из „%s“ није успело.\n" + +#: src/util/gnunet-scrypt.c:295 msgid "number of bits to require for the proof of work" msgstr "број битова за тражење доказивања о раду" -#: src/util/gnunet-scrypt.c:282 +#: src/util/gnunet-scrypt.c:301 msgid "file with private key, otherwise default is used" msgstr "датотека са личним кључем, у супротном користи се основна" -#: src/util/gnunet-scrypt.c:285 +#: src/util/gnunet-scrypt.c:307 msgid "file with proof of work, otherwise default is used" msgstr "датотека са доказом о раду, у супротном користи се основна" -#: src/util/gnunet-scrypt.c:288 +#: src/util/gnunet-scrypt.c:313 msgid "time to wait between calculations" msgstr "време за чекање између прорачуна" -#: src/util/gnunet-scrypt.c:299 +#: src/util/gnunet-scrypt.c:326 msgid "Manipulate GNUnet proof of work files" msgstr "Управља ГНУнет датотекама доказа о раду" -#: src/util/gnunet-service-resolver.c:299 -#, c-format -msgid "Could not resolve `%s' (%s): %s\n" -msgstr "Не могу да решим „%s“ (%s): %s\n" - -#: src/util/gnunet-service-resolver.c:371 -#: src/util/gnunet-service-resolver.c:412 -#, c-format -msgid "Could not find IP of host `%s': %s\n" -msgstr "Не могу да нађем ИП домаћина „%s“: %s\n" +#: src/util/gnunet-service-resolver.c:1287 +msgid "No DNS server available. DNS resolution will not be possible.\n" +msgstr "" -#: src/util/gnunet-uri.c:84 +#: src/util/gnunet-uri.c:88 #, c-format msgid "No URI specified on command line\n" msgstr "Није наведена путања на линији наредби\n" -#: src/util/gnunet-uri.c:89 -#, c-format -msgid "Invalid URI: does not start with `%s'\n" -msgstr "Неисправна путања: не почиње са „%s“\n" - -#: src/util/gnunet-uri.c:96 -#, c-format -msgid "Invalid URI: fails to specify subsystem\n" -msgstr "Неисправна путања: није успело навођење подсистема\n" - -#: src/util/gnunet-uri.c:106 -#, c-format -msgid "No handler known for subsystem `%s'\n" -msgstr "Није познат руковалац за подсистем „%s“\n" - -#: src/util/gnunet-uri.c:168 +#: src/util/gnunet-uri.c:178 msgid "Perform default-actions for GNUnet URIs" msgstr "Обавља основне радње за путање ГНУнет-а" -#: src/util/helper.c:338 +#: src/util/helper.c:323 #, c-format msgid "Error reading from `%s': %s\n" msgstr "Грешка читања из „%s“: %s\n" -#: src/util/helper.c:383 +#: src/util/helper.c:375 #, c-format msgid "Failed to parse inbound message from helper `%s'\n" msgstr "Нисам успео да обрадим долазну поруку са помоћника „%s“\n" -#: src/util/helper.c:609 +#: src/util/helper.c:602 #, c-format msgid "Error writing to `%s': %s\n" msgstr "Грешка писања у „%s“: %s\n" -#: src/util/network.c:134 +#: src/util/network.c:178 #, c-format msgid "Unable to shorten unix path `%s' while keeping name unique\n" -msgstr "Не могу да скратим јуникс путању „%s“ док задржавам назив јединственим\n" +msgstr "" +"Не могу да скратим јуникс путању „%s“ док задржавам назив јединственим\n" -#: src/util/network.c:1355 src/util/network.c:1480 +#: src/util/network.c:1364 #, c-format -msgid "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" -msgstr "Кобна унутрашња логичка грешка, процес се заплео у „%s“ (прекините са КТРЛ-Ц)!\n" +msgid "" +"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" +msgstr "" +"Кобна унутрашња логичка грешка, процес се заплео у „%s“ (прекините са КТРЛ-" +"Ц)!\n" -#: src/util/os_installation.c:421 +#: src/util/os_installation.c:411 #, c-format -msgid "Could not determine installation path for %s. Set `%s' environment variable.\n" -msgstr "Не могу да одредим путању инсталирања за „%s“. Поставите „%s“ променљиву окружења.\n" +msgid "" +"Could not determine installation path for %s. Set `%s' environment " +"variable.\n" +msgstr "" +"Не могу да одредим путању инсталирања за „%s“. Поставите „%s“ променљиву " +"окружења.\n" -#: src/util/os_installation.c:766 +#: src/util/os_installation.c:794 #, c-format msgid "Could not find binary `%s' in PATH!\n" msgstr "Не могу да нађем извршну „%s“ у ПУТАЊИ!\n" -#: src/util/os_installation.c:826 -#, c-format -msgid "CreateProcess failed for binary %s (%d).\n" -msgstr "„CreateProcess“ није успело за извршну „%s“ (%d).\n" - -#: src/util/os_installation.c:836 +#: src/util/os_installation.c:827 #, c-format -msgid "GetExitCodeProcess failed for binary %s (%d).\n" -msgstr "„GetExitCodeProcess“ није успело за извршну „%s“ (%d).\n" +msgid "Binary `%s' exists, but is not SUID\n" +msgstr "" -#: src/util/plugin.c:87 +#: src/util/plugin.c:86 #, c-format msgid "Initialization of plugin mechanism failed: %s!\n" msgstr "Покретање механизма прикључка није успело: %s!\n" -#: src/util/plugin.c:148 +#: src/util/plugin.c:147 #, c-format msgid "`%s' failed to resolve method '%s' with error: %s\n" msgstr "„%s“ није успело да реши метод '%s' са грешком: %s\n" @@ -7832,389 +8913,281 @@ msgstr "„%s“ није успело да реши метод '%s' са гре msgid "`%s' failed for library `%s' with error: %s\n" msgstr "„%s“ није успело за библиотеку '%s' са грешком: %s\n" -#: src/util/plugin.c:382 +#: src/util/plugin.c:384 msgid "Could not determine plugin installation path.\n" msgstr "Не могу да одредим путању инсталирања прикључка.\n" -#: src/util/program.c:246 src/util/service.c:1452 -#, c-format -msgid "Malformed configuration file `%s', exit ...\n" +#: src/util/program.c:267 +#, fuzzy, c-format +msgid "Unreadable or malformed configuration file `%s', exit ...\n" msgstr "Лоша датотека подешавања „%s“, излазим ...\n" -#: src/util/program.c:258 src/util/service.c:1467 -#, c-format -msgid "Could not access configuration file `%s'\n" -msgstr "Не могу да приступим датотеци подешавања „%s“\n" +#: src/util/program.c:284 +#, fuzzy, c-format +msgid "Unreadable or malformed default configuration file `%s', exit ...\n" +msgstr "Лоша датотека подешавања „%s“, излазим ...\n" -#: src/util/program.c:263 src/util/service.c:1462 -msgid "Malformed configuration, exit ...\n" +#: src/util/program.c:299 +#, fuzzy +msgid "Unreadable or malformed configuration, exit ...\n" msgstr "Лоше подешавање, излазим ...\n" -#: src/util/resolver_api.c:198 +#: src/util/regex.c:139 #, c-format -msgid "Must specify `%s' for `%s' in configuration!\n" -msgstr "Морате навести „%s“ за „%s“ у подешавањима!\n" +msgid "Bad mask: %d\n" +msgstr "Лоша маска: %d\n" -#: src/util/resolver_api.c:216 +#: src/util/resolver_api.c:220 #, c-format -msgid "Must specify `%s' or numeric IP address for `%s' of `%s' in configuration!\n" -msgstr "Морате навести „%s“ или бројевну ИП адресу за „%s“ од „%s“ у подешавањима!\n" +msgid "" +"Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n" +msgstr "" -#: src/util/resolver_api.c:348 -#, c-format -msgid "Timeout trying to resolve IP address `%s'.\n" -msgstr "Истекло је време при покушају решавања ИП адресе „%s“.\n" +#: src/util/resolver_api.c:242 +#, fuzzy, c-format +msgid "" +"Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS " +"resolution will be unavailable.\n" +msgstr "" +"Морате навести „%s“ или бројевну ИП адресу за „%s“ од „%s“ у подешавањима!\n" -#: src/util/resolver_api.c:352 +#: src/util/resolver_api.c:887 #, c-format msgid "Timeout trying to resolve hostname `%s'.\n" msgstr "Истекло је време при покушају решавања назива домаћина „%s“.\n" -#: src/util/resolver_api.c:908 -#, c-format -msgid "Could not resolve our FQDN : %s\n" -msgstr "Не могу да решим наш „FQDN“ : %s\n" - -#: src/util/scheduler.c:813 -msgid "Looks like we're busy waiting...\n" -msgstr "Изгледа да смо заузети чекајући...\n" - -#: src/util/scheduler.c:948 -#, c-format -msgid "Attempt to cancel dead task %llu!\n" -msgstr "Покушах да обришем неактиван задатак %llu!\n" - -#: src/util/server.c:484 -#, c-format -msgid "`%s' failed for port %d (%s).\n" -msgstr "„%s“ није успело за прикључник %d (%s).\n" - -#: src/util/server.c:493 -#, c-format -msgid "`%s' failed for port %d (%s): address already in use\n" -msgstr "„%s“ није успело за прикључник %d (%s): адреса је већ у употреби\n" - -#: src/util/server.c:499 -#, c-format -msgid "`%s' failed for `%s': address already in use\n" -msgstr "„%s“ није успело за „%s“: адреса је већ у употреби\n" - -#: src/util/server.c:892 -#, c-format -msgid "Processing code for message of type %u did not call `GNUNET_SERVER_receive_done' after %s\n" -msgstr "Обрађивачки код за поруку врсте %u није позвао „GNUNET_SERVER_receive_done“ након „%s“\n" - -#: src/util/service.c:347 -#, c-format -msgid "Unknown address family %d\n" -msgstr "Непозната породица адресе „%d“\n" - -#: src/util/service.c:354 -#, c-format -msgid "Access from `%s' denied to service `%s'\n" -msgstr "Приступ из „%s“ је забрањен за услугу „%s“\n" - -#: src/util/service.c:409 +#: src/util/resolver_api.c:900 #, c-format -msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n" -msgstr "Не могу да обрадим спецификацију ИПв4 мреже „%s“ за `%s:%s'\n" +msgid "Timeout trying to resolve IP address `%s'.\n" +msgstr "Истекло је време при покушају решавања ИП адресе „%s“.\n" -#: src/util/service.c:446 -#, c-format -msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n" -msgstr "Не могу да обрадим спецификацију ИПв6 мреже „%s“ за `%s:%s'\n" +#: src/util/resolver_api.c:1085 +#, fuzzy +msgid "Resolver not configured correctly.\n" +msgstr "Основна услуга „%s“ није подешена исправно!\n" -#: src/util/service.c:563 -#, c-format -msgid "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n" -msgstr "Искључујем ИПв6 подршку за услугу „%s“, нисм успео да направим ИПв6 прикључницу: %s\n" +#: src/util/resolver_api.c:1174 src/util/resolver_api.c:1197 +#: src/util/resolver_api.c:1211 +#, fuzzy, c-format +msgid "Could not resolve our FQDN: %s\n" +msgstr "Не могу да решим наш „FQDN“ : %s\n" #: src/util/service.c:653 -#, c-format -msgid "Disabling UNIX domain socket support for service `%s', failed to create UNIX domain socket: %s\n" -msgstr "Искључујем подршку прикључнице ЈУНИКС домена за услугу „%s“, нисм успео да направим прикључницу ЈУНИКС домена: %s\n" - -#: src/util/service.c:669 -#, c-format -msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n" -msgstr "Немам ни ПРИКЉУЧНИК ни ЈУНИКС_ПУТАЊУ за услугу „%s“, али је једно потребно\n" - -#: src/util/service.c:903 -msgid "Could not access a pre-bound socket, will try to bind myself\n" -msgstr "Не могу да приступим унапред свезаној прикључници, покушаћу да свежем себе самог\n" - -#: src/util/service.c:952 src/util/service.c:970 -#, c-format -msgid "Specified value for `%s' of service `%s' is invalid\n" -msgstr "Наведена вредност за „%s“ услуге „%s“ је неисправна\n" - -#: src/util/service.c:995 -#, c-format -msgid "Could not access pre-bound socket %u, will try to bind myself\n" -msgstr "Не могу да приступим унапред свезаној прикључници %u, покушаћу да свежем себе самог\n" - -#: src/util/service.c:1165 -#, c-format -msgid "Failed to start `%s' at `%s'\n" -msgstr "Нисам успео да покренем „%s“ на „%s“\n" - -#: src/util/service.c:1207 -#, c-format -msgid "Service `%s' runs at %s\n" -msgstr "Услуга „%s“ ради на „%s“\n" - -#: src/util/service.c:1256 -msgid "Service process failed to initialize\n" -msgstr "Процес услуге није успео да се покрене\n" - -#: src/util/service.c:1260 -msgid "Service process could not initialize server function\n" -msgstr "Процес услуге не може да покрене функцију сервера\n" - -#: src/util/service.c:1264 -msgid "Service process failed to report status\n" -msgstr "Процес услуге није успео да извести о стању\n" +#, fuzzy, c-format +msgid "" +"Processing code for message of type %u did not call " +"`GNUNET_SERVICE_client_continue' after %s\n" +msgstr "" +"Обрађивачки код за поруку врсте %u није позвао „GNUNET_SERVER_receive_done“ " +"након „%s“\n" -#: src/util/service.c:1319 -msgid "No such user" -msgstr "Нема таквог корисника" +#: src/util/service.c:1568 +msgid "" +"Could not bind to any of the ports I was supposed to, refusing to run!\n" +msgstr "" -#: src/util/service.c:1332 +#: src/util/socks.c:635 #, c-format -msgid "Cannot change user/group to `%s': %s\n" -msgstr "Не могу да променим власника/групу на „%s“: %s\n" - -#: src/util/service.c:1402 -msgid "do daemonize (detach from terminal)" -msgstr "ради демонизацију (откачиње од терминала)" +msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n" +msgstr "" -#: src/util/signal.c:89 +#: src/util/socks.c:652 #, c-format -msgid "signal (%d, %p) returned %d.\n" -msgstr "сигнал (%d, %p) је дао %d.\n" - -#: src/util/strings.c:145 -msgid "b" -msgstr "b" +msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" +msgstr "" -#: src/util/strings.c:433 +#: src/util/strings.c:503 #, c-format msgid "Character sets requested were `%s'->`%s'\n" msgstr "Скупови знакова се захтевају где је „%s“–>„%s“\n" -#: src/util/strings.c:561 +#: src/util/strings.c:637 msgid "Failed to expand `$HOME': environment variable `HOME' not set" -msgstr "Нисам успео да раширим „$HOME“: променљива окружења „HOME“ није постављена" - -#: src/util/strings.c:658 -msgid "µs" -msgstr "µs" - -#: src/util/strings.c:662 -msgid "forever" -msgstr "заувек" - -#: src/util/strings.c:664 -msgid "0 ms" -msgstr "0 ms" - -#: src/util/strings.c:670 -msgid "ms" -msgstr "ms" - -#: src/util/strings.c:676 -msgid "s" -msgstr "s" - -#: src/util/strings.c:682 -msgid "m" -msgstr "m" - -#: src/util/strings.c:688 -msgid "h" -msgstr "h" - -#: src/util/strings.c:695 -msgid "day" -msgstr "дан" - -#: src/util/strings.c:697 -msgid "days" -msgstr "дана" - -#: src/util/strings.c:726 -msgid "end of time" -msgstr "крај времена" +msgstr "" +"Нисам успео да раширим „$HOME“: променљива окружења „HOME“ није постављена" -#: src/util/strings.c:1159 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "ИПв6 адреса не почиње са [\n" -#: src/util/strings.c:1167 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "ИПв6 адреса садржи : за раздвајање броја прикључника\n" -#: src/util/strings.c:1173 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "ИПв6 адреса садржи ] пре : за раздвајање броја прикључника\n" -#: src/util/strings.c:1180 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "ИПв6 адреса садржи исправан број прикључника након последње „:“\n" -#: src/util/strings.c:1189 +#: src/util/strings.c:1273 #, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "Неисправна ИПв6 адреса „%s“: %s\n" -#: src/util/strings.c:1395 src/util/strings.c:1411 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "Прикључник није у опсегу\n" -#: src/util/strings.c:1420 +#: src/util/strings.c:1520 #, c-format msgid "Malformed port policy `%s'\n" msgstr "Лоша политика прикључника „%s“\n" -#: src/util/strings.c:1503 src/util/strings.c:1534 src/util/strings.c:1582 -#: src/util/strings.c:1603 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "Неисправан формат за ИП: „%s“\n" -#: src/util/strings.c:1560 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "Неисправна напомена мреже („/%d“ није исправно у ИПв4 ЦИДР-у)." -#: src/util/strings.c:1612 +#: src/util/strings.c:1708 #, c-format msgid "Invalid format: `%s'\n" msgstr "Неисправан формат: „%s“\n" -#: src/util/strings.c:1664 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "Неисправна напомена мреже (не завршава се са „;“: „%s“)\n" -#: src/util/strings.c:1714 +#: src/util/strings.c:1811 #, c-format msgid "Wrong format `%s' for netmask\n" msgstr "Погрешан формат „%s“ за мрежну маску\n" -#: src/util/strings.c:1745 +#: src/util/strings.c:1842 #, c-format msgid "Wrong format `%s' for network\n" msgstr "Погрешан формат „%s“ за мрежу\n" -#: src/vpn/gnunet-service-vpn.c:550 src/vpn/gnunet-service-vpn.c:1086 +#: src/util/time.c:848 src/util/time.c:876 +#, c-format +msgid "Failed to map `%s', cannot assure monotonic time!\n" +msgstr "" + +#: src/util/time.c:884 +#, c-format +msgid "" +"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" +msgstr "" + +#: src/vpn/gnunet-service-vpn.c:524 src/vpn/gnunet-service-vpn.c:1799 msgid "# Active channels" msgstr "# Активни канали" -#: src/vpn/gnunet-service-vpn.c:642 -msgid "# Bytes given to mesh for transmission" -msgstr "# Бајтови су дати мешу за преношење" - -#: src/vpn/gnunet-service-vpn.c:680 -msgid "# Bytes dropped in mesh queue (overflow)" +#: src/vpn/gnunet-service-vpn.c:583 +#, fuzzy +msgid "# Messages dropped in cadet queue (overflow)" msgstr "# Бајтови су одбачени у реду меша (прекорачење)" -#: src/vpn/gnunet-service-vpn.c:753 -msgid "# Mesh channels created" -msgstr "# Меш канали су направљени" +#: src/vpn/gnunet-service-vpn.c:736 +#, fuzzy +msgid "# ICMP packets received from cadet" +msgstr "# ИЦМП пакети су примљени од меша" + +#: src/vpn/gnunet-service-vpn.c:1112 +#, fuzzy +msgid "# UDP packets received from cadet" +msgstr "# УДП пакети су примљени од меша" + +#: src/vpn/gnunet-service-vpn.c:1262 +#, fuzzy +msgid "# TCP packets received from cadet" +msgstr "# ТЦП пакети су примљени од меша" -#: src/vpn/gnunet-service-vpn.c:784 -msgid "Failed to setup mesh channel!\n" -msgstr "Нисам успео да поставим меш канал!\n" +#: src/vpn/gnunet-service-vpn.c:1461 +#, fuzzy +msgid "# Cadet channels created" +msgstr "# Меш канали су направљени" -#: src/vpn/gnunet-service-vpn.c:978 +#: src/vpn/gnunet-service-vpn.c:1685 #, c-format msgid "Protocol %u not supported, dropping\n" msgstr "Протокол %u није подржан, одбацујем\n" -#: src/vpn/gnunet-service-vpn.c:1305 +#: src/vpn/gnunet-service-vpn.c:1821 +#, fuzzy +msgid "# Packets dropped (channel not yet online)" +msgstr "# ICMP пакет је одбачен (није дозвољен)" + +#: src/vpn/gnunet-service-vpn.c:2019 msgid "# ICMPv4 packets dropped (not allowed)" msgstr "# ICMPv4 пакети су одбачени (нису дозвољени)" -#: src/vpn/gnunet-service-vpn.c:1326 +#: src/vpn/gnunet-service-vpn.c:2045 msgid "# ICMPv6 packets dropped (not allowed)" msgstr "# ICMPv6 пакети су одбачени (нису дозвољени)" -#: src/vpn/gnunet-service-vpn.c:1531 +#: src/vpn/gnunet-service-vpn.c:2282 msgid "# Packets received from TUN interface" msgstr "# Пакети су примљени са ТУН сучеља" -#: src/vpn/gnunet-service-vpn.c:1564 src/vpn/gnunet-service-vpn.c:1600 +#: src/vpn/gnunet-service-vpn.c:2316 src/vpn/gnunet-service-vpn.c:2348 #, c-format msgid "Packet received for unmapped destination `%s' (dropping it)\n" msgstr "Пакет је примљен за одмапирано одредиште „%s“ (одбацујем га)\n" -#: src/vpn/gnunet-service-vpn.c:1610 +#: src/vpn/gnunet-service-vpn.c:2355 msgid "Received IPv4 packet with options (dropping it)\n" msgstr "Примљен је ИПв4 пакет са опцијама (одбацујем га)\n" -#: src/vpn/gnunet-service-vpn.c:1624 +#: src/vpn/gnunet-service-vpn.c:2371 #, c-format msgid "Received packet of unknown protocol %d from TUN (dropping it)\n" msgstr "Примљен је пакет непознатог протокола %d са ТУН-а (одбацујем га)\n" -#: src/vpn/gnunet-service-vpn.c:1706 -msgid "# ICMP packets received from mesh" -msgstr "# ИЦМП пакети су примљени од меша" - -#: src/vpn/gnunet-service-vpn.c:2045 -msgid "# UDP packets received from mesh" -msgstr "# УДП пакети су примљени од меша" - -#: src/vpn/gnunet-service-vpn.c:2200 -msgid "# TCP packets received from mesh" -msgstr "# ТЦП пакети су примљени од меша" - -#: src/vpn/gnunet-service-vpn.c:2351 +#: src/vpn/gnunet-service-vpn.c:2411 msgid "Failed to find unallocated IPv4 address in VPN's range\n" msgstr "Нисам успео да нађем недодељену ИПв4 адресу у опсегу ВПН-а\n" -#: src/vpn/gnunet-service-vpn.c:2406 +#: src/vpn/gnunet-service-vpn.c:2463 msgid "Failed to find unallocated IPv6 address in VPN's range\n" msgstr "Нисам успео да нађем недодељену ИПв6 адресу у опсегу ВПН-а\n" -#: src/vpn/gnunet-service-vpn.c:2447 src/vpn/gnunet-service-vpn.c:2663 +#: src/vpn/gnunet-service-vpn.c:2497 src/vpn/gnunet-service-vpn.c:2705 msgid "# Active destinations" msgstr "# Активна одредишта" -#: src/vpn/gnunet-service-vpn.c:2715 +#: src/vpn/gnunet-service-vpn.c:2750 msgid "Failed to allocate IP address for new destination\n" msgstr "Нисам успео да доделим ИП адресу за ново одредиште\n" -#: src/vpn/gnunet-service-vpn.c:2982 +#: src/vpn/gnunet-service-vpn.c:3008 msgid "Must specify valid IPv6 address" msgstr "Морате навести исправну ИПв6 адресу" -#: src/vpn/gnunet-service-vpn.c:3006 +#: src/vpn/gnunet-service-vpn.c:3036 msgid "Must specify valid IPv6 mask" msgstr "Морате навести исправну ИПв6 маску" -#: src/vpn/gnunet-service-vpn.c:3014 +#: src/vpn/gnunet-service-vpn.c:3046 msgid "IPv6 support disabled as this system does not support IPv6\n" msgstr "ИПв6 подршка је искључена јер овај систем не подржава ИПв6\n" -#: src/vpn/gnunet-service-vpn.c:3027 +#: src/vpn/gnunet-service-vpn.c:3062 msgid "Must specify valid IPv4 address" msgstr "Морате навести исправну ИПв4 адресу" -#: src/vpn/gnunet-service-vpn.c:3040 +#: src/vpn/gnunet-service-vpn.c:3079 msgid "Must specify valid IPv4 mask" msgstr "Морате навести исправну ИПв4 маску" -#: src/vpn/gnunet-service-vpn.c:3050 +#: src/vpn/gnunet-service-vpn.c:3091 msgid "IPv4 support disabled as this system does not support IPv4\n" msgstr "ИПв4 подршка је искључена јер овај систем не подржава ИПв4\n" -#: src/vpn/gnunet-vpn.c:147 +#: src/vpn/gnunet-vpn.c:143 msgid "Error creating tunnel\n" msgstr "Грешка стварања тунела\n" -#: src/vpn/gnunet-vpn.c:190 src/vpn/gnunet-vpn.c:221 +#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:226 #, c-format msgid "Option `%s' makes no sense with option `%s'.\n" msgstr "Опција „%s“ нема смисла са опцијом „%s“.\n" @@ -8224,69 +9197,1351 @@ msgstr "Опција „%s“ нема смисла са опцијом „%s“ msgid "Option `%s' or `%s' is required.\n" msgstr "Опција „%s“ или „%s“ је потребна.\n" -#: src/vpn/gnunet-vpn.c:215 +#: src/vpn/gnunet-vpn.c:217 #, c-format msgid "Option `%s' or `%s' is required when using option `%s'.\n" msgstr "Опција „%s“ или „%s“ се захтева приликом коришћења опције „%s“.\n" -#: src/vpn/gnunet-vpn.c:235 +#: src/vpn/gnunet-vpn.c:240 #, c-format msgid "`%s' is not a valid peer identifier.\n" msgstr "„%s“ није исправан одредник парњака.\n" -#: src/vpn/gnunet-vpn.c:255 +#: src/vpn/gnunet-vpn.c:259 #, c-format msgid "`%s' is not a valid IP address.\n" msgstr "„%s“ није исправна ИП адреса.\n" -#: src/vpn/gnunet-vpn.c:290 +#: src/vpn/gnunet-vpn.c:296 msgid "request that result should be an IPv4 address" msgstr "захтева да резултат треба да буде ИПв4 адреса" -#: src/vpn/gnunet-vpn.c:293 +#: src/vpn/gnunet-vpn.c:302 msgid "request that result should be an IPv6 address" msgstr "захтева да резултат треба да буде ИПв6 адреса" -#: src/vpn/gnunet-vpn.c:296 +#: src/vpn/gnunet-vpn.c:309 msgid "how long should the mapping be valid for new tunnels?" msgstr "колико дуго мапирање треба бити важеће за нове тунеле?" -#: src/vpn/gnunet-vpn.c:299 +#: src/vpn/gnunet-vpn.c:316 msgid "destination IP for the tunnel" msgstr "ИП одредишта за тунел" -#: src/vpn/gnunet-vpn.c:302 +#: src/vpn/gnunet-vpn.c:323 msgid "peer offering the service we would like to access" msgstr "парњак који нуди услугу којој желимо да приступимо" -#: src/vpn/gnunet-vpn.c:305 +#: src/vpn/gnunet-vpn.c:330 msgid "name of the service we would like to access" msgstr "назив услуге којој желимо да приступимо" -#: src/vpn/gnunet-vpn.c:308 +#: src/vpn/gnunet-vpn.c:335 msgid "service is offered via TCP" msgstr "услуга се нуди путем ТЦП-а" -#: src/vpn/gnunet-vpn.c:311 +#: src/vpn/gnunet-vpn.c:340 msgid "service is offered via UDP" msgstr "услуга се нуди путем УДП-ом" -#: src/vpn/gnunet-vpn.c:323 +#: src/vpn/gnunet-vpn.c:354 msgid "Setup tunnels via VPN." msgstr "Поставља тунеле путем ВПН-а." -#: src/include/gnunet_common.h:566 src/include/gnunet_common.h:573 -#: src/include/gnunet_common.h:581 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 +msgid "Failed to connect to the namestore!\n" +msgstr "Нисам успео да се повежем са смештајем назива!\n" + +#~ msgid "Client was disconnected from arm service, trying to reconnect.\n" +#~ msgstr "" +#~ "Клијент је ископчан са аур услуге, покушавам поново да се повежем.\n" + +#~ msgid "Misconfiguration (can not connect to the ARM service)" +#~ msgstr "Лоше подешавање (не могу да се повежем на АУР услугу)" + +#~ msgid "ARM API is busy" +#~ msgstr "АУР АПИ је заузет" + +#~ msgid "Request does not fit into a message" +#~ msgstr "Захтев не стаје у поруку" + +#~ msgid "Request timed out" +#~ msgstr "Истекло је време захтева" + +#~ msgid "timeout in MSECS milliseconds for completing current operation" +#~ msgstr "време истека у МСЕК милисекундама за завршавање текуће радње" + +#~ msgid "Could not send status result to client\n" +#~ msgstr "Не могу да пошаљем резултат стања клијенту\n" + +#~ msgid "Could not send list result to client\n" +#~ msgstr "Не могу да пошаљем резултат списка клијенту\n" + +#, c-format +#~ msgid "Starting default services `%s'\n" +#~ msgstr "Покрећем основне услуге „%s“\n" + +#~ msgid "" +#~ "No default services configured, GNUnet will not really start right now.\n" +#~ msgstr "Основне услуге нису подешене, ГНУнет се неће баш сада покренути.\n" + +#, c-format +#~ msgid "Received %s message\n" +#~ msgstr "Примих %s поруку\n" + +#, c-format +#~ msgid "Received last message for %s \n" +#~ msgstr "Примих последњу поруку за %s \n" + +#, c-format +#~ msgid "Outbound quota configure for network `%s' is %llu\n" +#~ msgstr "Квота одлазности подешена за мрежу „%s“ је %llu\n" + +#, c-format +#~ msgid "Initializing solver `%s '`%s'\n" +#~ msgstr "Покрећем решавача „%s “„%s“\n" + +#~ msgid "Failed to initialize solver!\n" +#~ msgstr "Нисам успео да покренем решавача!\n" + +#~ msgid "Problem size too large, cannot allocate memory!\n" +#~ msgstr "Величина проблема је превелика, не могу да доделим меморију!\n" + +#, c-format +#~ msgid "Adding address for peer `%s' multiple times\n" +#~ msgstr "Додајем адресу за парњака „%s“ више пута\n" + +#, c-format +#~ msgid "Updating address property `%s' for peer `%s' %p not added before\n" +#~ msgstr "" +#~ "Освежавам својство адресе „%s“ за парњака „%s“ %p који није додат раније\n" + +#, c-format +#~ msgid "" +#~ "Adjusting inconsistent outbound quota configuration for network `%s', is " +#~ "%llu must be at least %llu\n" +#~ msgstr "" +#~ "Поправљам недоследно подешавање одлазне квоте за мрежу „%s“, која је %llu " +#~ "а мора бити најмање %llu\n" + +#, c-format +#~ msgid "" +#~ "Adjusting inconsistent inbound quota configuration for network `%s', is " +#~ "%llu must be at least %llu\n" +#~ msgstr "" +#~ "Поправљам недоследно подешавање долазне квоте за мрежу „%s“, која је %llu " +#~ "а мора бити најмање %llu\n" + +#, c-format +#~ msgid "" +#~ "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n" +#~ msgstr "" +#~ "Поправљам недоследно подешавање одлазне квоте за мрежу „%s“ са %llu на " +#~ "%.0f\n" + +#, c-format +#~ msgid "" +#~ "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n" +#~ msgstr "" +#~ "Поправљам недоследно подешавање долазне квоте за мрежу „%s“ са %llu на " +#~ "%.0f\n" + +#, c-format +#~ msgid "" +#~ "Using default quota configuration for network `%s' (in/out) %llu/%llu\n" +#~ msgstr "" +#~ "Користим основно подешавање квоте за мрежу „%s“ (улаз/излаз) %llu/%llu\n" + +#, c-format +#~ msgid "Invalid network type `%u' `%s': Disconnect!\n" +#~ msgstr "Неисправна врста мреже „%u“ „%s“: Прекидам везу!\n" + +#~ msgid "Benchmarking done\n" +#~ msgstr "Оцењивање је готово\n" + +#, c-format +#~ msgid "Failed to connect peer 0 and %u\n" +#~ msgstr "Нисам успео да повежем парњака 0 и %u\n" + +#~ msgid "Connecting peers on CORE level\n" +#~ msgstr "Повезујем парњаке на „CORE“ нивоу\n" + +#, c-format +#~ msgid "Connecting master [%u] with slave [%u]\n" +#~ msgstr "Повезујем надређеног [%u] са потчињеним [%u]\n" + +#, c-format +#~ msgid "Could not connect master [%u] and slave [%u]\n" +#~ msgstr "Не могу да повежем надређеног [%u] и потчињеног [%u]\n" + +#~ msgid "Initialization failed, shutdown\n" +#~ msgstr "Покретање није успело, гасим\n" + +#, c-format +#~ msgid "Service `%s' is not running\n" +#~ msgstr "Услуга „%s“ није покренута\n" + +#~ msgid "Call terminated\n" +#~ msgstr "Позив је окончан\n" + +#~ msgid "Failed to start gnunet-helper-w32-console\n" +#~ msgstr "Нисам успео да покренем „gnunet-helper-w32-console“\n" + +#~ msgid "Mesh audio channel not ready; audio data dropped\n" +#~ msgstr "Звучни канал меша није спреман; звучни подаци су одбачени\n" + +#, c-format +#~ msgid "" +#~ "No available phone for incoming call on line %u, sending HANG_UP signal\n" +#~ msgstr "" +#~ "Нема доступних телефона за долазни позив на линији %u, шаљем сигнал " +#~ "ПРЕКИД\n" + +#, c-format +#~ msgid "Received incoming channel on port %u\n" +#~ msgstr "Примих долазни канал на прикључник %u\n" + +#~ msgid "Client was disconnected from core service, trying to reconnect.\n" +#~ msgstr "" +#~ "Клијент је ископчан са кључне услуге, покушавам поново да се повежем.\n" + +#, c-format +#~ msgid "Peer `%s'\n" +#~ msgstr "Парњак „%s“\n" + +#, c-format +#~ msgid "" +#~ "Received PING from `%s' for different identity: I am `%s', PONG identity: " +#~ "`%s'\n" +#~ msgstr "" +#~ "Примих ПИНГ са „%s“ за другачији идентитет: Ја сам „%s“, ПОНГ идентитет: " +#~ "„%s“\n" + +#~ msgid "# sessions terminated by transport disconnect" +#~ msgstr "# окончане сесије прекидом преноса" + +#~ msgid "# neighbour entries allocated" +#~ msgstr "# уноси суседа су додељени" + +#~ msgid "# encrypted bytes given to transport" +#~ msgstr "# шифровани бајтови су дати преносу" + +#, c-format +#~ msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" +#~ msgstr "Неподржана порука врсте %u (%u бајта) је примљена са парњака „%s“\n" + +#~ msgid "# messages discarded (expired prior to transmission)" +#~ msgstr "# поруке су одбачене (истекле су пре преноса)" + +#, c-format +#~ msgid "No `%s' specified for `%s' in configuration!\n" +#~ msgstr "Није наведено „%s“ за „%s“ у подешавањима!\n" + +#~ msgid "Postgres datacache running\n" +#~ msgstr "Остава података Постгреса ради\n" + +#~ msgid "Sqlite datacache running\n" +#~ msgstr "Остава података Скулајта ради\n" + +#, c-format +#~ msgid "Failed to close statement %p: %d\n" +#~ msgstr "Нисам успео да затворим тврдњу „%p“: %d\n" + +#~ msgid "Template datacache running\n" +#~ msgstr "Остава података шаблона ради\n" + +#~ msgid "Failed to transmit request to drop database.\n" +#~ msgstr "Нисам успео да пренесем захтев бази података убацивања.\n" + +#~ msgid "# queue entry timeouts" +#~ msgstr "# истекла су времена уноса реда" + +#~ msgid "# Requests dropped from datastore queue" +#~ msgstr "# Захтеви су одбачени из реда смештаја података" + +#~ msgid "# transmission request failures" +#~ msgstr "# неуспеси захтева преноса" + +#~ msgid "Failed to receive status response from database." +#~ msgstr "Нисам успео да примим одговор стања из базе података." + +#~ msgid "Error reading response from datastore service" +#~ msgstr "Грешка читања одговора из услуге смештаја података" + +#~ msgid "Invalid error message received from datastore service" +#~ msgstr "Неисправна порука грешке је примљена из услуге смештаја података" + +#~ msgid "# UPDATE requests executed" +#~ msgstr "# захтеви ОСВЕЖИ су извршени" + +#~ msgid "Failed to receive response from database.\n" +#~ msgstr "Нисам успео да примим одговор из базе података.\n" + +#, c-format +#~ msgid "Cannot use the same configuration for source and destination\n" +#~ msgstr "Не могу да користим исто подешавање за извор и одредиште\n" + +#~ msgid "" +#~ "specifies the configuration to use to access an alternative datastore; " +#~ "will merge that datastore into our current datastore" +#~ msgstr "" +#~ "наводи подешавање за коришћење за приступ заменском смештају података; " +#~ "стопиће тај смештај података у наш тренутни смештај података" + +#~ msgid "Transmission to client failed!\n" +#~ msgstr "Пренос до клијента није успео!\n" + +#~ msgid "Shutdown in progress, aborting transmission.\n" +#~ msgstr "Гашење је у току, прекидам пренос.\n" + +#~ msgid "# UPDATE requests received" +#~ msgstr "# захтеви ОСВЕЖИ су примљени" + +#, c-format +#~ msgid "Failed to prepare statement `%s'\n" +#~ msgstr "Нисам успео да припремим стање „%s“\n" + +#~ msgid "Invalid data in database. Trying to fix (by deletion).\n" +#~ msgstr "" +#~ "Неисправан податак у бази података. Покушавам да поправим (брисањем).\n" + +#~ msgid "Failed to connect to the DHT service!\n" +#~ msgstr "Нисам успео да се повежем са „DHT“ услугом!\n" + +#~ msgid "PUT request sent with key" +#~ msgstr "СТАВИ захтев је послат са кључем" + +#~ msgid "Timeout sending PUT request!\n" +#~ msgstr "Истекло је време слања СТАВИ захтева!\n" + +#~ msgid "PUT request not confirmed!\n" +#~ msgstr "Захтев СТАВИ није потврђен!\n" + +#~ msgid "Failed to connect to transport service!\n" +#~ msgstr "Нисам успео да се повежем са услугом преноса!\n" + +#~ msgid "Could not pass reply to client, message too big!\n" +#~ msgstr "Не могу да проследим одговор клијенту, порука је превелика!\n" + +#~ msgid "# Preference updates given to core" +#~ msgstr "# Ажурирања поставки су дата језгру" + +#~ msgid "# Queued messages discarded (peer disconnected)" +#~ msgstr "# Поруке из реда су одбачене (парњак је ископчан)" + +#~ msgid "# Bytes transmitted to other peers" +#~ msgstr "# Бајтови су пренесени другим парњацима" + +#~ msgid "# Bytes of bandwidth requested from core" +#~ msgstr "# Бајтови пропусног опсега које захтева језгро" + +#, c-format +#~ msgid "" +#~ "\n" +#~ "SUPU %s, %s, %d,my_identity = %s" +#~ msgstr "" +#~ "\n" +#~ "SUPU %s, %s, %d,my_identity = %s" + +#, c-format +#~ msgid "" +#~ "\n" +#~ "SUPU %s, %s, %d" +#~ msgstr "" +#~ "\n" +#~ "SUPU %s, %s, %d" + +#, c-format +#~ msgid "Configured DNS exit `%s' is not working / valid.\n" +#~ msgstr "Подешени ДНС излаз „%s“ не ради / није исправан.\n" + +#~ msgid "only monitor DNS replies" +#~ msgstr "само надгледа ДНС одговоре" + +#, c-format +#~ msgid "`%s' must be installed SUID, refusing to run\n" +#~ msgstr "„%s“ мора бити инсталиран СУИБ, одбијам да радим\n" + +#~ msgid "Print information about DV state" +#~ msgstr "Исписује податке о ДВ стању" + +#~ msgid "# Bytes received from MESH" +#~ msgstr "# Бајтови су примљени од МЕША" + +#, c-format +#~ msgid "No service %s found for %s on port %d!\n" +#~ msgstr "Ниједна услуга %s није нађена %s на прикључнику %d!\n" + +#~ msgid "# TCP requests dropped (no such service)" +#~ msgstr "# TCP захтеви су одбачени (нема такве услуге)" + +#~ msgid "# UDP requests dropped (no such service)" +#~ msgstr "# UDP захтеви су одбачени (нема такве услуге)" + +#~ msgid "Experimentation daemon shutting down ...\n" +#~ msgstr "Демон експериментисања се гаси ...\n" + +#~ msgid "Experimentation daemon starting ...\n" +#~ msgstr "Демон експериментисања се покреће ...\n" + +#~ msgid "Failed to create statistics!\n" +#~ msgstr "Нисам успео да направим статистику!\n" + +#~ msgid "GNUnet experimentation daemon" +#~ msgstr "Демон експериментисања ГНУнет-а" + +#, c-format +#~ msgid "Experiment `%s': Experiment signature is invalid\n" +#~ msgstr "Експеримент „%s“: Потпис експеримента је неисправан\n" + +#, c-format +#~ msgid "" +#~ "Adding experiment `%s' running from `%s' to `%s' every %llu sec. for %llu " +#~ "sec. \n" +#~ msgstr "" +#~ "Додајем експеримент „%s“ који ради из „%s“ у „%s“ сваке %llu сек. за %llu " +#~ "сек. \n" + +#, c-format +#~ msgid "Experiment `%s': Issuer missing\n" +#~ msgstr "Експеримент „%s“: Недостаје издавач\n" + +#, c-format +#~ msgid "Experiment `%s': Issuer invalid\n" +#~ msgstr "Експеримент „%s“: Неисправан издавач\n" + +#, c-format +#~ msgid "Experiment `%s': Issuer not accepted!\n" +#~ msgstr "Експеримент „%s“: Издавач није прихваћен!\n" + +#, c-format +#~ msgid "Experiment `%s': Version missing or invalid \n" +#~ msgstr "Експеримент „%s“: Недостаје издање или је неисправно \n" + +#, c-format +#~ msgid "Experiment `%s': Required capabilities missing \n" +#~ msgstr "Експеримент „%s“: Захтеване могућности недостају \n" + +#, c-format +#~ msgid "Experiment `%s': Required capabilities invalid \n" +#~ msgstr "Експеримент „%s“: Захтеване могућности су неисправне \n" + +#, c-format +#~ msgid "Failed to parse file `%s'\n" +#~ msgstr "Нисам успео да обрадим датотеку „%s“\n" + +#~ msgid "" +#~ "No valid experiment issuers configured! Set value to public keys of " +#~ "issuers! Exiting.\n" +#~ msgstr "" +#~ "Нису подешени исправни издавачи експеримента! Поставите вредност на јавне " +#~ "кључеве издавача! Излазим.\n" + +#~ msgid "Invalid value for public key\n" +#~ msgstr "Неисправна вредност за јавни кључ\n" + +#, c-format +#~ msgid "Cannot read experiments file `%s'\n" +#~ msgstr "Не могу да прочитам датотеку експеримената „%s“\n" + +#, c-format +#~ msgid "Cannot send message to peer `%s' for experiment `%s'\n" +#~ msgstr "Не могу да пошаљем поруку парњаку „%s“ за екперимент „%s“\n" + +#, c-format +#~ msgid "Sending experimentation request to peer %s\n" +#~ msgstr "Шаљем захтев експериментисања парњаку %s\n" + +#, c-format +#~ msgid "Added peer `%s' as active node\n" +#~ msgstr "Додат је парњак „%s“ као активан чвор\n" + +#, c-format +#~ msgid "Connected to peer %s\n" +#~ msgstr "Повезан са парњаком „%s“\n" + +#, c-format +#~ msgid "Disconnected from peer %s\n" +#~ msgstr "Прекинута је веза са парњаком „%s“\n" + +#, c-format +#~ msgid "Peer `%s' did not respond to request for experiment `%s'\n" +#~ msgstr "Парњак „%s“ није одговорио на захтев за експериментом „%s“\n" + +#, c-format +#~ msgid "Starting inbound experiment `%s' with peer `%s'\n" +#~ msgstr "Покрећем експеримент долазности „%s“ са парњаком „%s“\n" + +#, c-format +#~ msgid "Starting outbound experiment `%s' with peer `%s'\n" +#~ msgstr "Покрећем експеримент одлазности „%s“ са парњаком „%s“\n" + +#, c-format +#~ msgid "Received %s message from peer %s for experiment `%s'\n" +#~ msgstr "Примих %s поруку са парњака %s за експеримент „%s“\n" + +#, c-format +#~ msgid "Failed to receive response for `%s' request from `%s' service.\n" +#~ msgstr "Нисам успео да примим одговор за „%s“ захтев од „%s“ услуге.\n" + +#, c-format +#~ msgid "" +#~ "Failed to receive valid response for `%s' request from `%s' service.\n" +#~ msgstr "" +#~ "Нисам успео да примим исправан одговор за „%s“ захтев од „%s“ услуге.\n" + +#~ msgid "unknown error" +#~ msgstr "непозната грешка" + +#, c-format +#~ msgid "Insufficient space for publishing: %s" +#~ msgstr "Недовољно простора за објављивање: %s" + +#~ msgid "Unexpected time for a response from `fs' service." +#~ msgstr "Неочекивано време за одговор са „fs“ услуге." + +#~ msgid "Timeout waiting for `fs' service." +#~ msgstr "Истекло је време чекања на „fs“ услугу." + +#~ msgid "Invalid response from `fs' service." +#~ msgstr "Неисправан одговор са „fs“ услуге." + +#~ msgid "`++' not allowed in KSK URI" +#~ msgstr "++ није дозвољено у KSK УРИ-ју" + +#~ msgid "Quotes not balanced in KSK URI" +#~ msgstr "Квоте нису уравнотежене у КСК путањи" + +#~ msgid "SKS URI malformed" +#~ msgstr "SKS УРИ је лоше" + +#, c-format +#~ msgid "Could not access hostkey file `%s'.\n" +#~ msgstr "Не могу да приступим датотеци кључа домаћина „%s“.\n" + +#~ msgid "# replies transmitted to other peers" +#~ msgstr "# одговори су пренесени другим парњацима" + +#~ msgid "# replies dropped" +#~ msgstr "# одговори су одбачени" + +#~ msgid "# requests dropped due to initiator not being connected" +#~ msgstr "# захтеви су одбачени јер покретач није повезан" + +#~ msgid "# transmission failed (core has no bandwidth)" +#~ msgstr "# пренос није успео (језгро нема пропусни опсег)" + +#~ msgid "# Replies received from MESH" +#~ msgstr "# Одговори су примљени од MESH-а" + +#~ msgid "Failed to deserialize lookup reply from GNS service!\n" +#~ msgstr "Нисам успео да десеријализујем одговор претраге са ГНС услуге!\n" + +#~ msgid "No ego configured for `dns2gns` subsystem\n" +#~ msgstr "Није подешен его за „dns2gns“ подсистем\n" + +#~ msgid "No valid GNS zone specified!\n" +#~ msgstr "Није наведена исправна ГНС зона!\n" + +#~ msgid "Authoritative FCFS suffix to use (optional); default: fcfs.zkey.eu" +#~ msgstr "" +#~ "Ауторитативни ФЦФС суфикс за коришћење (изборно); основно: fcfs.zkey.eu" + +#~ msgid "Authoritative DNS suffix to use (optional); default: zkey.eu" +#~ msgstr "Ауторитативни ДНС суфикс за коришћење (изборно); основно: zkey.eu" + +#~ msgid "Public key of the GNS zone to use (overrides default)" +#~ msgstr "Јавни кључ ГНС зоне за коришћење (преписује основно)" + +#, c-format +#~ msgid "Ego for `%s' not found, cannot perform lookup.\n" +#~ msgstr "Нисам нашао его за „%s“, не могу да обавим претрагу.\n" + +#, c-format +#~ msgid "" +#~ "Ego for `gns-master' not found, cannot perform lookup. Did you run " +#~ "gnunet-gns-import.sh?\n" +#~ msgstr "" +#~ "Нисам нашао его за „gns-master“, не могу да обавим претрагу. Да ли сте " +#~ "покренули „gnunet-gns-import.sh“?\n" + +#~ msgid "Specify the name of the ego of the zone to lookup the record in" +#~ msgstr "Наводи назив егоа зоне у којој ће се тражити запис" + +#, c-format +#~ msgid "" +#~ "Ego for `gns-short' not found. This is not really fatal, but i'll pretend " +#~ "that it is and refuse to perform a lookup. Did you run gnunet-gns-import." +#~ "sh?\n" +#~ msgstr "" +#~ "Нисам нашао „gns-short“. То и није баш кобно, али ћу се ја претварати да " +#~ "јесте и одбићу да обавим претраживање. Да ли сте покренули „gnunet-gns-" +#~ "import.sh“?\n" + +#, c-format +#~ msgid "Failed to connect to identity service\n" +#~ msgstr "Нисам успео да се повежем са услугом идентитета\n" + +#~ msgid "SSL connection to plain IPv4 address requested\n" +#~ msgstr "ССЛ веза за обичну ИПв4 адресу је захтевана\n" + +#~ msgid "No ego configured for `shorten-zone`\n" +#~ msgstr "Его није подешен за „shorten-zone“\n" + +#, c-format +#~ msgid "No ego configured for `%s`\n" +#~ msgstr "Није подешен его за `%s`\n" + +#, c-format +#~ msgid "Hostname `%s' is not well-formed, resolution fails\n" +#~ msgstr "Назив домаћина „%s“ није лепо оформљен, резолуција није успела\n" + +#, c-format +#~ msgid "Unable to parse PKEY record `%s'\n" +#~ msgstr "Не могу да обрадим „PKEY“ запис „%s“\n" + +#, c-format +#~ msgid "Hostlist file `%s' could not be removed\n" +#~ msgstr "Датотека списка домаћина „%s“ не може бити уклоњена\n" + +#~ msgid "Advertisement message could not be queued by core\n" +#~ msgstr "Поруку оглашавања језгро не може да стави у ред\n" + +#, c-format +#~ msgid "Invalid tunnel owner `%s'\n" +#~ msgstr "Неисправан власник тунела „%s“\n" + +#~ msgid "You must NOT give a TARGETwhen using 'request all' options\n" +#~ msgstr "НЕ можете дати МЕТУ када користите опције „request all“\n" + +#~ msgid "port to listen to (default; 0)" +#~ msgstr "прикључник за ослушкивање (основно; 0)" + +#~ msgid "Wrong CORE service\n" +#~ msgstr "Погрешна ЈЕЗГРЕНА услуга\n" + +#, c-format +#~ msgid "No default ego configured in identity service\n" +#~ msgstr "Није подешен основни его у услузи идентитета\n" + +#, c-format +#~ msgid "Identity service is not running\n" +#~ msgstr "Услуга идентитета није покренута\n" + +#, c-format +#~ msgid "Please pass valid port number as the first argument! (got `%s')\n" +#~ msgstr "" +#~ "Проследите исправан број прикључника као први аргумент! (добих „%s“)\n" + +#~ msgid "NAT traversal with ICMP Server timed out.\n" +#~ msgstr "Истекло је време НАТ попречника са ИЦМП сервером.\n" + +#~ msgid "gnunet-helper-nat-server found, testing it\n" +#~ msgstr "нађох „gnunet-helper-nat-server“, тестирам је\n" + +#~ msgid "gnunet-helper-nat-client found, enabling it\n" +#~ msgstr "нађох „gnunet-helper-nat-client“, омогућавам је\n" + +#~ msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" +#~ msgstr "" +#~ "нисам нашао „gnunet-helper-nat-client“ или иза НАТ-а, искључујем је\n" + +#~ msgid "malformed" +#~ msgstr "лоше" + +#, c-format +#~ msgid "" +#~ "Configuration requires `%s', but binary is not installed properly (SUID " +#~ "bit not set). Option disabled.\n" +#~ msgstr "" +#~ "Подешавање захтева „%s“, али бинарно није исправно инсталирано („SUID“ " +#~ "бит није постављен). Опција је искључена.\n" + +#~ msgid "" +#~ "Internal IP address not known, cannot use ICMP NAT traversal method\n" +#~ msgstr "" +#~ "Унутрашња ИП адреса није позната, не могу користити методу ИЦМП НАТ " +#~ "попречника\n" + +#, c-format +#~ msgid "Running gnunet-helper-nat-client %s %s %u\n" +#~ msgstr "Извршавам „gnunet-helper-nat-client“ %s %s %u\n" + +#~ msgid "NSE service is not running\n" +#~ msgstr "НСЕ услуга није покренута\n" + +#~ msgid "Error while checking if NSE service is running or not\n" +#~ msgstr "Грешка приликом проверавања да ли НСЕ услуга ради или не\n" + +#~ msgid "aborted due to explicit disconnect request" +#~ msgstr "прекинуто услед изричитог захтева прекида везе" + +#~ msgid "failed to transmit request (service down?)" +#~ msgstr "нисам успео да пренесем захтев (услуга је пала?)" + +#~ msgid "Received invalid message from `PEERINFO' service." +#~ msgstr "Примих неисправну поруку са услуге „PEERINFO“." + +#~ msgid "Timeout transmitting iteration request to `PEERINFO' service." +#~ msgstr "" +#~ "Истекло је време преношења захтева понављања ка услузи „ПОДАЦИ_ПАРЊАКА“." + +#, c-format +#~ msgid "Could not connect to `%s' service.\n" +#~ msgstr "Не могу да се повежем са „%s“ услугом.\n" + +#, c-format +#~ msgid "Failure: Did not receive %s\n" +#~ msgstr "Неуспех: Нисам примио „%s“\n" + +#, c-format +#~ msgid "Failure adding HELLO: %s\n" +#~ msgstr "Неуспех додавања „HELLO“-а: %s\n" + +#, c-format +#~ msgid "Service `%s' is not running, please start GNUnet\n" +#~ msgstr "Услуга „%s“ није покренута, покрените ГНУнет\n" + +#, c-format +#~ msgid "`%s:%s' failed at %s:%d with error: %s" +#~ msgstr "`%s:%s' није успело на %s:%d са грешком: %s" + +#, c-format +#~ msgid "Unable to initialize Postgres: %s" +#~ msgstr "Не могу да покренем Постгрес: %s" + +#~ msgid "Failed to store membership information!\n" +#~ msgstr "Нисам успео да сместим податке о чланству!\n" + +#~ msgid "Failed to test membership!\n" +#~ msgstr "Нисам успео да тестирам чланство!\n" + +#~ msgid "Failed to store fragment!\n" +#~ msgstr "Нисам успео да сместим делић!\n" + +#~ msgid "Failed to get fragment!\n" +#~ msgstr "Нисам успео да добавим делић!\n" + +#~ msgid "Failed to get message!\n" +#~ msgstr "Нисам успео да добавим поруку!\n" + +#~ msgid "Failed to get message fragment!\n" +#~ msgstr "Нисам успео да добавим делић поруке!\n" + +#~ msgid "Failed to get master counters!\n" +#~ msgstr "Нисам успео да добавим главне бројаче!\n" + +#~ msgid "Tried to set invalid state variable name!\n" +#~ msgstr "Покушах да поставим назив променљиве неисправног стања!\n" + +#~ msgid "Failed to begin modifying state!\n" +#~ msgstr "Нисам успео да започнем стање измене!\n" + +#, c-format +#~ msgid "Unknown operator: %c\n" +#~ msgstr "Непознат оператор: %c\n" + +#~ msgid "Failed to end modifying state!\n" +#~ msgstr "Нисам успео да завршим стање измене!\n" + +#~ msgid "Failed to begin synchronizing state!\n" +#~ msgstr "Нисам успео да започнем стање усклађивања!\n" + +#~ msgid "Failed to end synchronizing state!\n" +#~ msgstr "Нисам успео да завршим стање усклађивања!\n" + +#~ msgid "Failed to reset state!\n" +#~ msgstr "Нисам успео да повратим стање!\n" + +#~ msgid "Tried to get invalid state variable name!\n" +#~ msgstr "Покушах да добавим назив променљиве неисправног стања!\n" + +#~ msgid "Failed to get state variable!\n" +#~ msgstr "Нисам успео да добавим променљиву стања!\n" + +#, c-format +#~ msgid "`%s' failed at %s:%d with error: %s (%d)\n" +#~ msgstr "„%s“ није успело на %s:%d са грешком: %s (%d)\n" + +#~ msgid "SQLite database running\n" +#~ msgstr "База података СКуЛајта ради\n" + +#~ msgid "Configuration option \"regex_prefix\" missing. Exiting\n" +#~ msgstr "Недостаје опција подешавања „regex_prefix“. Излазим\n" + +#~ msgid "Please give a session key for --input_key!\n" +#~ msgstr "Дајте кључ сесије за „--input_key“!\n" + +#, c-format +#~ msgid "Could not convert `%s' to integer.\n" +#~ msgstr "Не могу да претворим „%s“ у цео број.\n" + +#~ msgid "" +#~ "A comma separated mask to select which elements should actually be " +#~ "compared." +#~ msgstr "" +#~ "Зарезом раздвојена маска за бирање који елементи заправо требају бити " +#~ "поређени." + +#, c-format +#~ msgid "Client (%p) disconnected from us.\n" +#~ msgstr "Прекинута је веза клијента (%p) са нама.\n" + +#, c-format +#~ msgid "Could not send message to client (%p)!\n" +#~ msgstr "Не могу да пошаљем поруку клијенту (%p)!\n" + +#, c-format +#~ msgid "Sending session-end notification to client (%p) for session %s\n" +#~ msgstr "Шаљем обавештење о крају сесије клијенту (%p) за сесију %s\n" + +#, c-format +#~ msgid "Sent result to client (%p), this session (%s) has ended!\n" +#~ msgstr "Резултати су послати клијенту (%p), ова сесија (%s) је завршена!\n" + +#~ msgid "Could not send service-response message via mesh!)\n" +#~ msgstr "Не могу да пошаљем поруку одговора услуге путем меша!)\n" + +#, c-format +#~ msgid "" +#~ "Failed to communicate with `%s', scalar product calculation aborted.\n" +#~ msgstr "" +#~ "Нисам успео да разговарам са „%s“, прорачун скаларног производа је " +#~ "прекинут.\n" + +#~ msgid "Transmitting service request.\n" +#~ msgstr "Одашиљем захтев услуге.\n" + +#~ msgid "Could not send service-request multipart message to channel!\n" +#~ msgstr "Не могу да пошаљем вишеделовну поруку захтева услуге каналу!\n" + +#, c-format +#~ msgid "Successfully created new channel to peer (%s)!\n" +#~ msgstr "Успешно је створен нови канал за парњака (%s)!\n" + +#~ msgid "Could not send message to channel!\n" +#~ msgstr "Не могу да пошаљем поруку на канал!\n" + +#~ msgid "Too short message received from client!\n" +#~ msgstr "Прекратка порука је примљена од клијента!\n" + +#~ msgid "" +#~ "Invalid message received from client, session information incorrect!\n" +#~ msgstr "" +#~ "Неисправна порука је примљена са клијента, подаци о сесији су нетачни!\n" + +#, c-format +#~ msgid "" +#~ "Duplicate session information received, cannot create new session with " +#~ "key `%s'\n" +#~ msgstr "" +#~ "Двоструки подаци сесије су примљени, не могу да направим нову сесију са " +#~ "кључем „%s“\n" + +#, c-format +#~ msgid "" +#~ "Got client-request-session with key %s, preparing channel to remote " +#~ "service.\n" +#~ msgstr "" +#~ "Добих сесију захтева клијента са кључем %s, припремам канал за удљену " +#~ "услугу.\n" + +#, c-format +#~ msgid "Creating new channel for session with key %s.\n" +#~ msgstr "Стварам нови канал за сесију са кључем „%s“.\n" + +#, c-format +#~ msgid "" +#~ "Got client-responder-session with key %s and a matching service-request-" +#~ "session set, processing.\n" +#~ msgstr "" +#~ "Добих сесију одговарача клијента са кључем %s и одговарајући скуп сесије " +#~ "захтева услуге, обрађујем.\n" + +#, c-format +#~ msgid "" +#~ "Got client-responder-session with key %s but NO matching service-request-" +#~ "session set, queuing element for later use.\n" +#~ msgstr "" +#~ "Добих сесију одговарача клијента са кључем %s али НЕ и одговарајући скуп " +#~ "сесије захтева услуге, стављам елемент у ред за касније коришћење.\n" + +#, c-format +#~ msgid "New incoming channel from peer %s.\n" +#~ msgstr "Нови долазни канал са парњака „%s“.\n" + +#, c-format +#~ msgid "Peer disconnected, terminating session %s with peer (%s)\n" +#~ msgstr "" +#~ "Веза са парњаком је прекинута, окончавам сесију %s са парњаком (%s)\n" + +#, c-format +#~ msgid "Got session with key %s and a matching element set, processing.\n" +#~ msgstr "" +#~ "Добих сесију са кључем „%s“ и одговарајући скуп елемената, обрађујем.\n" + +#, c-format +#~ msgid "Got session with key %s without a matching element set, queueing.\n" +#~ msgstr "" +#~ "Добих сесију са кључем „%s“ без одговарајућег скупа елемената, стављам у " +#~ "ред.\n" + +#, c-format +#~ msgid "" +#~ "Got message with duplicate session key (`%s'), ignoring service request.\n" +#~ msgstr "" +#~ "Добих поруку са двоструким кључем сесије („%s“), занемарујем захтев " +#~ "сесије.\n" + +#~ msgid "Shutting down, initiating cleanup.\n" +#~ msgstr "Гасим, покрећем чишћење.\n" + +#~ msgid "# SUC responder result messages received" +#~ msgstr "# примљене су поруке резултата „SUC“ одговарача" + +#~ msgid "# bytes sent to scalarproduct" +#~ msgstr "# бајтови су послати скаларном производу" + +#~ msgid "Failed to connect to the scalarproduct service\n" +#~ msgstr "Нисам успео да се повежем са услугом скаларног производа\n" + +#~ msgid "Failed to send a message to the statistics service\n" +#~ msgstr "Нисам успео да пошаљем поруку услузи статистике\n" + +#~ msgid "Failed to send a message to the scalarproduct service\n" +#~ msgstr "Нисам успео да пошаљем поруку услузи скаларног производа\n" + +#~ msgid "Could not connect to mesh service\n" +#~ msgstr "Не могу да се повежем са меш услугом\n" + +#, c-format +#~ msgid "Trying to connect to remote host, but service `%s' is not running\n" +#~ msgstr "" +#~ "Покушавам да се повежем са удаљеним домаћином, али услуга „%s“ није " +#~ "покренута\n" + +#~ msgid "" +#~ "Failed to receive acknowledgement from statistics service, some " +#~ "statistics might have been lost!\n" +#~ msgstr "" +#~ "Нисам успео да примим потврду од услуге статистике, неке статистике могу " +#~ "бити изгубљене!\n" + +#~ msgid "Misconfiguration (can't connect to the ARM service)" +#~ msgstr "Лоше подешавање (не могу да се повежем на АУР услугу)" + +#~ msgid "Request doesn't fit into a message" +#~ msgstr "Захтев не стаје у поруку" + +#~ msgid "skip COUNT number of keys in the beginning" +#~ msgstr "прескаче УКУПНОСТ број кључева на почетку" + +#~ msgid "GNUnet topology control (maintaining P2P mesh and F2F constraints)" +#~ msgstr "Контрола ГНУнет размештаја (задржавајући П2П меш и Ф2Ф ограничења)" + +#, c-format +#~ msgid "Could not obtain a valid network for `%s' %s (%s)\n" +#~ msgstr "Не могу да добијем исправну везу за „%s“ %s (%s)\n" + +#, c-format +#~ msgid "" +#~ "Address or session unknown: failed to update properties for peer `%s' " +#~ "plugin `%s' address `%s' session %p\n" +#~ msgstr "" +#~ "Адреса или сесија је непозната: нисам успео да својства за парњака „%s“ " +#~ "прикључак „%s“ адресу „%s“ сесију %p\n" + +#, c-format +#~ msgid "" +#~ "Dropping message of type %u and size %u, have %u/%u messages pending\n" +#~ msgstr "" +#~ "Одбацујем поруку врсте %u и величине %u, има %u/%u порука на чекању\n" + +#, c-format +#~ msgid "Rejecting control connection from peer `%s', which is not me!\n" +#~ msgstr "Одбацујем контролну везу од парњака „%s“, а то нисам ја!\n" + +#, c-format +#~ msgid "Blacklist refuses connection attempt to peer `%s'\n" +#~ msgstr "Списак забрана одбацује покушај повезивања са парњаком „%s“\n" + +#, c-format +#~ msgid "Blacklist allows connection attempt to peer `%s'\n" +#~ msgstr "Списак забрана дозвољава покушај повезивања са парњаком „%s“\n" + +#~ msgid "# REQUEST CONNECT messages received" +#~ msgstr "# ЗАХТЕВАЈ ПОВЕЖИ_СЕ поруке су примљене" + +#, c-format +#~ msgid "Received a request connect message for peer `%s'\n" +#~ msgstr "Примих поруку захтева повезивања за парњака „%s“\n" + +#~ msgid "# REQUEST DISCONNECT messages received" +#~ msgstr "# ЗАХТЕВАЈ ПРЕКИНИ_ВЕЗУ поруке су примљене" + +#, c-format +#~ msgid "Received a request disconnect message for peer `%s'\n" +#~ msgstr "Примих поруку захтева прекида везе за парњака „%s“\n" + +#~ msgid "# keepalives sent" +#~ msgstr "# одржавања у раду су послата" + +#, c-format +#~ msgid "" +#~ "Failed to send CONNECT message to peer `%s' using address `%s' session " +#~ "%p\n" +#~ msgstr "" +#~ "Нисам успео да пошаљем поруку ПОВЕЖИ_СЕ парњаку „%s“ користећи адресу " +#~ "„%s“ сесије %p\n" + +#~ msgid "# Failed attempts to switch addresses (failed to send CONNECT CONT)" +#~ msgstr "" +#~ "# Нису успели покушаји за пребацивање адреса (нисам успео да пошаљем " +#~ "УКУПНО ПОВЕЖИ_СЕ)" + +#~ msgid "# SESSION_CONNECT messages sent" +#~ msgstr "# ПОВЕЗИВАЊЕ_СЕСИЈЕ поруке су послате" + +#, c-format +#~ msgid "Blacklisting disapproved to connect to peer `%s'\n" +#~ msgstr "Списак забрана није одобрио повезивање са парњаком „%s“\n" + +#~ msgid "# CONNECT messages received" +#~ msgstr "# ПОВЕЖИ_СЕ поруке су примљене" + +#~ msgid "# Failed attempts to switch addresses (no response)" +#~ msgstr "# Нису успели покушаји за пребацивање адреса (нема одговора)" + +#~ msgid "# SET QUOTA messages ignored (no such peer)" +#~ msgstr "# ПОСТАВИ КВОТУ поруке су занемарене (нема таквог парњака)" + +#, c-format +#~ msgid "" +#~ "Not transmitting `%s' with `%s', message too big (%u bytes!). This should " +#~ "not happen.\n" +#~ msgstr "" +#~ "Не преносим „%s“ са „%s“, порука је превелика (%u бајта!). Ово није " +#~ "требало да се деси.\n" + +#~ msgid "# PING without HELLO messages sent" +#~ msgstr "# ПИНГ без „HELLO“ порука је послат" + +#, c-format +#~ msgid "Received a PING message with validation bug from `%s'\n" +#~ msgstr "Примих ПИНГ поруку са грешком потврђивања са „%s“\n" + +#, c-format +#~ msgid "Validation received new %s message for peer `%s' with size %u\n" +#~ msgstr "" +#~ "Потврђивање је примило нову „%s“ поруку за парњака „%s“ са величином %u\n" + +#, c-format +#~ msgid "Adding `%s' without addresses for peer `%s'\n" +#~ msgstr "Додајем „%s“ без адреса за парњака „%s“\n" + +#, c-format +#~ msgid "" +#~ "Peer `%s' %s %s\n" +#~ "\t%s%s\n" +#~ "\t%s%s\n" +#~ "\t%s%s\n" +#~ msgstr "" +#~ "Парњак „%s“ %s %s\n" +#~ "\t%s%s\n" +#~ "\t%s%s\n" +#~ "\t%s%s\n" + +#, c-format +#~ msgid "Peer `%s' %s `%s' \n" +#~ msgstr "Парњак „%s“ %s „%s“ \n" + +#~ msgid "No transport plugins configured, peer will never communicate\n" +#~ msgstr "Нису подешени прикључци преноса, парњак неће никада комуницирати\n" + +#, c-format +#~ msgid "No port configured for plugin `%s', cannot test it\n" +#~ msgstr "Није подешен прикључник за прикључак „%s“, не могу да га тестирам\n" + +#, c-format +#~ msgid "Successfully connected to `%s'\n" +#~ msgstr "Успешно је успостављена веза са „%s“\n" + +#, c-format +#~ msgid "Successfully disconnected from `%s'\n" +#~ msgstr "Успешно је прекинута веза са „%s“\n" + +#~ msgid "Failed to send connect request to transport service\n" +#~ msgstr "Нисам успео да пошаљем захтев за повезивање са услугом преноса\n" + +#~ msgid "Failed to send request to transport service\n" +#~ msgstr "Нисам успео да пошаљем захтев услузи преноса\n" + +#~ msgid "print information for all pending validations " +#~ msgstr "исписује податке за сва потврђивања на чекању " + +#~ msgid "print information for all pending validations continously" +#~ msgstr "непрекидно исписује податке за сва потврђивања на чекању" + +#~ msgid "test transport configuration (involves external server)" +#~ msgstr "тестира подешавање транспорта (призива спољни сервер)" + +#~ msgid "# Bluetooth ACKs sent" +#~ msgstr "# АЦК-ови блутута су послати" + +#~ msgid "# Bluetooth messages defragmented" +#~ msgstr "# делићи Блутут порука су уједињени" + +#~ msgid "# Bluetooth sessions allocated" +#~ msgstr "# Блутут сесије су додељене" + +#~ msgid "# Bluetooth message fragments sent" +#~ msgstr "# Делићи блутут поруке су послати" + +#~ msgid "# Bluetooth messages pending (with fragmentation)" +#~ msgstr "# Поруке блутута су на чекању (са расцепканошћу)" + +#~ msgid "# Bluetooth MAC endpoints allocated" +#~ msgstr "# Крајње тачке Блутут МАЦ-а су додељене" + +#~ msgid "# HELLO messages received via Bluetooth" +#~ msgstr "# „HELLO“ поруке су примљене путем блутута" + +#~ msgid "# fragments received via Bluetooth" +#~ msgstr "# делићи су примљени путем Блутута" + +#~ msgid "# ACKs received via Bluetooth" +#~ msgstr "# АЦК-ови су примљени путем блутута" + +#~ msgid "# Bluetooth DATA messages discarded due to CRC32 error" +#~ msgstr "# Поруке ПОДАТАКА блутута су одбачене услед „CRC32“ грешке" + +#~ msgid "# Bluetooth DATA messages processed" +#~ msgstr "# Поруке Блутут ПОДАТАКА су обрађене" + +#~ msgid "# HELLO beacons sent via Bluetooth" +#~ msgstr "# „HELLO“ ознаке су послате путем Блутута" + +#~ msgid "Bluetooth address with invalid size encountered\n" +#~ msgstr "Наишли смо на адресу блутута са неисправном величином\n" + +#, c-format +#~ msgid "Helper binary `%s' not SUID, cannot run bluetooth transport\n" +#~ msgstr "" +#~ "Извршна помоћника „%s“ није СУИБ, не могу да покренем блутут пренос\n" + +#, c-format +#~ msgid "Binding to IPv4 address %s\n" +#~ msgstr "Свезујем за ИПв4 адресу %s\n" + +#, c-format +#~ msgid "Binding to IPv6 address %s\n" +#~ msgstr "Свезујем за ИПв6 адресу %s\n" + +#, c-format +#~ msgid "Trying to send with invalid session %p\n" +#~ msgstr "Покушавам да пошаљем са неисправном сесијом %p\n" + +#~ msgid "# IPv4 broadcast HELLO beacons received via udp" +#~ msgstr "# ИПв4 свеодредишне „HELLO“ ознаке су примљене путем удп-а" + +#, c-format +#~ msgid "" +#~ "Trying to create session for address of unexpected length %u (should be " +#~ "%u or %u)\n" +#~ msgstr "" +#~ "Покушавам да направим сесију за адресу неочекиване дужине %u (треба бити " +#~ "%u или %u)\n" + +#, c-format +#~ msgid "Given `%s' option is out of range: %llu > %u\n" +#~ msgstr "Дата „%s“ опција је ван опсега: %llu > %u\n" + +#, c-format +#~ msgid "Invalid IPv6 address: `%s'\n" +#~ msgstr "Неисправна ИПв6 адреса: „%s“\n" + +#~ msgid "No UNIXPATH given in configuration!\n" +#~ msgstr "Није дата ЈУНИКС_ПУТАЊА у подешавањима!\n" + +#~ msgid "# WLAN messages defragmented" +#~ msgstr "# делићи „WLAN“ порука су уједињени" + +#~ msgid "# HELLO messages received via WLAN" +#~ msgstr "# „HELLO“ поруке су примљене путем „WLAN“-а" + +#~ msgid "# fragments received via WLAN" +#~ msgstr "# делићи су примљени путем „WLAN“-а" + +#~ msgid "# DATA messages received via WLAN" +#~ msgstr "# поруке ПОДАТАКА су примљене путем „WLAN“-а" + +#~ msgid "WLAN address with invalid size encountered\n" +#~ msgstr "Наишли смо на адресу „WLAN“ са неисправном величином\n" + +#, c-format +#~ msgid "Received unexpected message of type %u in %s:%u\n" +#~ msgstr "Примих неочекивану поруку врсте %u у %s:%u\n" + +#~ msgid "Failed to initialize testing library!\n" +#~ msgstr "Нисам успео да покренем библиотеку тестирања!\n" + +#, c-format +#~ msgid "Metadata `%s' failed to deserialize" +#~ msgstr "Метаподаци „%s“ нису успели да се десеријализују" + +#, c-format +#~ msgid "" +#~ "Could not determine valid hostname and port for service `%s' from " +#~ "configuration.\n" +#~ msgstr "" +#~ "Не могу да одредим исправан назив доамћина и прикључник за услугу „%s“ из " +#~ "подешавања.\n" + +#, c-format +#~ msgid "Could not connect to service `%s', configuration broken.\n" +#~ msgstr "Не могу да се повежем на услугу „%s“, подешавање је оштећено.\n" + +#, c-format +#~ msgid "Failure to transmit request to service `%s'\n" +#~ msgstr "Нисам успео да пренесем захтев услузи „%s“\n" + +#~ msgid "Could not submit request, not expecting to receive a response.\n" +#~ msgstr "Не могу да предам захтев, не очекујем да примим одговор.\n" + +#, c-format +#~ msgid "Failed to create or access directory for log file `%s'\n" +#~ msgstr "" +#~ "Нисам успео да направим или да приступим директоријуму да забележим " +#~ "датотеку „%s“\n" + +#, c-format +#~ msgid "" +#~ "Failed to establish TCP connection to `%s:%u', no further addresses to " +#~ "try.\n" +#~ msgstr "" +#~ "Нисам успео да успоставим ТЦП везу са `%s:%u', нема будућих адреса за " +#~ "покушавање.\n" + +#, c-format +#~ msgid "Trying to connect to `%s' (%p)\n" +#~ msgstr "Покушавам да се повежем на „%s“ (%p)\n" + +#, c-format +#~ msgid "Attempt to connect to `%s' failed\n" +#~ msgstr "Покушај повезивања са „%s“ није успео\n" + +#, c-format +#~ msgid "Could not acquire lock on file `%s': %s...\n" +#~ msgstr "Не могу да остварим закључавање на датотеци „%s“: %s...\n" + +#~ msgid "Creating a new private key. This may take a while.\n" +#~ msgstr "Стварам нови лични кључ. Ово може потрајати.\n" + +#~ msgid "This may be ok if someone is currently generating a private key.\n" +#~ msgstr "Ово може бити у реду ако неко тренутно ствара лични кључ.\n" + +#, c-format +#~ msgid "" +#~ "When trying to read key file `%s' I found %u bytes but I need at least " +#~ "%u.\n" +#~ msgstr "" +#~ "Приликом покушаја читања датотеке кључа „%s“ нађох %u бајта али ми треба " +#~ "барем %u.\n" + +#~ msgid "This may be ok if someone is currently generating a key.\n" +#~ msgstr "Ово може бити у реду ако неко тренутно ствара кључ.\n" + +#, c-format +#~ msgid "EdDSA signature verification failed at %s:%d: %s\n" +#~ msgstr "Провера „EdDSA“ потписа није успела на %s:%d: %s\n" + +#~ msgid "print the hash of the public key in ASCII format" +#~ msgstr "исписује хеш јавног кључа у АСКРИ формату" + +#, c-format +#~ msgid "Could not resolve `%s' (%s): %s\n" +#~ msgstr "Не могу да решим „%s“ (%s): %s\n" + +#, c-format +#~ msgid "Could not find IP of host `%s': %s\n" +#~ msgstr "Не могу да нађем ИП домаћина „%s“: %s\n" + +#, c-format +#~ msgid "CreateProcess failed for binary %s (%d).\n" +#~ msgstr "„CreateProcess“ није успело за извршну „%s“ (%d).\n" + +#, c-format +#~ msgid "GetExitCodeProcess failed for binary %s (%d).\n" +#~ msgstr "„GetExitCodeProcess“ није успело за извршну „%s“ (%d).\n" + +#, c-format +#~ msgid "Must specify `%s' for `%s' in configuration!\n" +#~ msgstr "Морате навести „%s“ за „%s“ у подешавањима!\n" + +#~ msgid "Looks like we're busy waiting...\n" +#~ msgstr "Изгледа да смо заузети чекајући...\n" + +#, c-format +#~ msgid "Attempt to cancel dead task %llu!\n" +#~ msgstr "Покушах да обришем неактиван задатак %llu!\n" + +#~ msgid "Could not access a pre-bound socket, will try to bind myself\n" +#~ msgstr "" +#~ "Не могу да приступим унапред свезаној прикључници, покушаћу да свежем " +#~ "себе самог\n" + +#, c-format +#~ msgid "signal (%d, %p) returned %d.\n" +#~ msgstr "сигнал (%d, %p) је дао %d.\n" + +#~ msgid "b" +#~ msgstr "b" + +#~ msgid "µs" +#~ msgstr "µs" + +#~ msgid "forever" +#~ msgstr "заувек" + +#~ msgid "0 ms" +#~ msgstr "0 ms" + +#~ msgid "ms" +#~ msgstr "ms" + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "m" +#~ msgstr "m" + +#~ msgid "h" +#~ msgstr "h" + +#~ msgid "day" +#~ msgstr "дан" + +#~ msgid "days" +#~ msgstr "дана" + +#~ msgid "end of time" +#~ msgstr "крај времена" + +#~ msgid "# Bytes given to mesh for transmission" +#~ msgstr "# Бајтови су дати мешу за преношење" + +#~ msgid "Failed to setup mesh channel!\n" +#~ msgstr "Нисам успео да поставим меш канал!\n" + #, c-format -msgid "Assertion failed at %s:%d.\n" -msgstr "Потврђивање није успело на %s:%d.\n" +#~ msgid "Assertion failed at %s:%d.\n" +#~ msgstr "Потврђивање није успело на %s:%d.\n" -#: src/include/gnunet_common.h:593 #, c-format -msgid "External protocol violation detected at %s:%d.\n" -msgstr "Повреда спољног протокола је откривена на %s:%d.\n" +#~ msgid "External protocol violation detected at %s:%d.\n" +#~ msgstr "Повреда спољног протокола је откривена на %s:%d.\n" -#: src/include/gnunet_common.h:620 src/include/gnunet_common.h:629 #, c-format -msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" -msgstr "„%s“ није успело на датотеци „%s“ на %s:%d са грешком: %s\n" +#~ msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" +#~ msgstr "„%s“ није успело на датотеци „%s“ на %s:%d са грешком: %s\n" diff --git a/po/sv.po b/po/sv.po index 6dd57d227..9321ba243 100644 --- 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: 2020-10-13 16:12+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2006-01-21 17:16+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1303 +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 #, fuzzy, c-format msgid "Ego `%s' not known to identity service\n" msgstr "\"%s\": okänd tjänst: %s\n" @@ -27,8 +27,8 @@ msgid "Issuer public key `%s' is not well-formed\n" msgstr "Ogiltigt argument: \"%s\"\n" #: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 -#: src/namestore/gnunet-namestore-fcfsd.c:1154 #: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 #, fuzzy, c-format msgid "Failed to connect to namestore\n" msgstr "Misslyckades att ansluta till gnunetd.\n" @@ -502,15 +502,83 @@ msgstr "" msgid "Initiating shutdown as requested by client.\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:896 -msgid "Stop logging\n" +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 +#, c-format +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:952 -#, fuzzy, c-format -msgid "Start logging `%s'\n" +#: src/ats/gnunet-ats-solver-eval.c:3011 +#, c-format +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3063 +#, c-format +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997 +msgid "solver to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 +msgid "experiment to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3564 +#, fuzzy +msgid "print logging" msgstr "Startade samling \"%s\".\n" +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:326 +#, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:336 +#, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:382 +#, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:474 +#, fuzzy, c-format +msgid "Failed to initialize solver `%s'!\n" +msgstr "Kunde inte initiera SQLite.\n" + +#: src/ats/plugin_ats_proportional.c:1142 +#, fuzzy, c-format +msgid "Invalid %s configuration %f \n" +msgstr "Kunde inte spara konfigurationsfil \"%s\":" + +#: src/ats/plugin_ats_proportional.c:1165 +#, fuzzy, c-format +msgid "Invalid %s configuration %f\n" +msgstr "Kunde inte spara konfigurationsfil \"%s\":" + #: src/ats-tests/ats-testing.c:420 #, c-format msgid "Connected master [%u] with slave [%u]\n" @@ -521,6 +589,15 @@ msgstr "" msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "Misslyckades att ansluta till gnunetd.\n" +#: src/ats-tests/ats-testing-log.c:896 +msgid "Stop logging\n" +msgstr "" + +#: src/ats-tests/ats-testing-log.c:952 +#, fuzzy, c-format +msgid "Start logging `%s'\n" +msgstr "Startade samling \"%s\".\n" + #: src/ats-tests/gnunet-ats-sim.c:92 #, c-format msgid "" @@ -528,16 +605,6 @@ msgid "" "= %u KiB/s\n" msgstr "" -#: src/ats-tests/gnunet-solver-eval.c:997 src/ats/gnunet-ats-solver-eval.c:3552 -msgid "solver to use" -msgstr "" - -#: src/ats-tests/gnunet-solver-eval.c:1003 -#: src/ats-tests/gnunet-solver-eval.c:1008 -#: src/ats/gnunet-ats-solver-eval.c:3557 -msgid "experiment to use" -msgstr "" - #: src/ats-tool/gnunet-ats.c:299 #, c-format msgid "%u address resolutions had a timeout\n" @@ -659,73 +726,6 @@ msgstr "" msgid "Print information about ATS state" msgstr "Skriv ut information om GNUnets motparter." -#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 -#, c-format -msgid "" -"Could not load quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3011 -#, c-format -msgid "" -"No outbound quota configured for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3063 -#, c-format -msgid "" -"No outbound quota configure for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3564 -#, fuzzy -msgid "print logging" -msgstr "Startade samling \"%s\".\n" - -#: src/ats/gnunet-ats-solver-eval.c:3569 -msgid "save logging to disk" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3574 -msgid "disable normalization" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:326 -#, c-format -msgid "" -"Could not load %s quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:336 -#, c-format -msgid "%s quota configured for network `%s' is %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:382 -#, c-format -msgid "" -"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:474 -#, fuzzy, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "Kunde inte initiera SQLite.\n" - -#: src/ats/plugin_ats_proportional.c:1142 -#, fuzzy, c-format -msgid "Invalid %s configuration %f \n" -msgstr "Kunde inte spara konfigurationsfil \"%s\":" - -#: src/ats/plugin_ats_proportional.c:1165 -#, fuzzy, c-format -msgid "Invalid %s configuration %f\n" -msgstr "Kunde inte spara konfigurationsfil \"%s\":" - #: src/auction/gnunet-auction-create.c:163 msgid "description of the item to be sold" msgstr "" @@ -763,7 +763,7 @@ msgstr "" #: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 #: src/conversation/gnunet-conversation-test.c:256 -#: src/revocation/gnunet-revocation.c:552 src/template/gnunet-template.c:75 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 #, fuzzy msgid "help text" msgstr "hjälptext för -t" @@ -865,28 +865,6 @@ msgstr "" msgid "Connection to conversation service lost, trying to reconnect\n" msgstr "" -#: src/conversation/gnunet-conversation-test.c:120 -#, c-format -msgid "" -"\n" -"End of transmission. Have a GNU day.\n" -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:146 -#, c-format -msgid "" -"\n" -"We are now playing your recording back. If you can hear it, your audio " -"settings are working..." -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:218 -#, c-format -msgid "" -"We will now be recording you for %s. After that time, the recording will be " -"played back to you..." -msgstr "" - #: src/conversation/gnunet-conversation.c:264 #, c-format msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" @@ -1146,8 +1124,30 @@ msgstr "" msgid "Enables having a conversation with other GNUnet users." msgstr "" -#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#: src/conversation/gnunet-conversation-test.c:120 +#, c-format +msgid "" +"\n" +"End of transmission. Have a GNU day.\n" +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:146 +#, c-format +msgid "" +"\n" +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:218 +#, c-format +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" + #: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 #, c-format msgid "Read error from STDIN: %d %s\n" msgstr "" @@ -1279,7 +1279,7 @@ msgstr "\"%s\" %s misslyckades: %s\n" msgid "Failed to allocate %u bytes for second packet\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/conversation/gnunet-service-conversation.c:1287 +#: src/conversation/gnunet-service-conversation.c:1286 #, fuzzy, c-format msgid "Could not open line, port %s already in use!\n" msgstr "Kunde inte ansluta till gnunetd.\n" @@ -2021,7 +2021,7 @@ msgid "" msgstr "" #: src/datastore/plugin_datastore_sqlite.c:1316 -#: src/namecache/plugin_namecache_sqlite.c:570 +#: src/namecache/plugin_namecache_sqlite.c:564 #: src/namestore/plugin_namestore_sqlite.c:765 msgid "Sqlite database running\n" msgstr "" @@ -2093,6 +2093,54 @@ msgstr "" msgid "Prints all packets that go through the DHT." msgstr "" +#: src/dht/gnunet_dht_profiler.c:922 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" + +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +#, fuzzy +msgid "number of peers to start" +msgstr "antal iterationer" + +#: src/dht/gnunet_dht_profiler.c:961 +msgid "number of PUTs to perform per peer" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1023 +#, fuzzy +msgid "Measure quality and performance of the DHT service." +msgstr "Kan inte tillgå tjänsten" + #: src/dht/gnunet-dht-put.c:133 msgid "Must provide KEY and DATA for DHT put!\n" msgstr "" @@ -2363,61 +2411,14 @@ msgstr "" msgid "# DHT requests combined" msgstr "# byte mottogs via TCP" -#: src/dht/gnunet_dht_profiler.c:922 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" - -#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 -#, fuzzy -msgid "number of peers to start" -msgstr "antal iterationer" - -#: src/dht/gnunet_dht_profiler.c:961 -msgid "number of PUTs to perform per peer" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 -#: src/testbed/gnunet-testbed-profiler.c:305 -msgid "name of the file with the login information for the testbed" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:973 -msgid "delay between rounds for collecting statistics (default: 30 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:979 -msgid "delay to start doing PUTs (default: 1 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:985 -msgid "delay to start doing GETs (default: 5 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:990 -msgid "replication degree for DHT PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:996 -msgid "chance that a peer is selected at random for PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1002 -msgid "timeout for DHT PUT and GET requests (default: 1 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1023 -#, fuzzy -msgid "Measure quality and performance of the DHT service." -msgstr "Kan inte tillgå tjänsten" - #: src/dht/plugin_block_dht.c:189 #, fuzzy, c-format msgid "Block not of type %u\n" msgstr "Ingen transport av typ %d är känd.\n" #: src/dht/plugin_block_dht.c:198 -msgid "Size mismatch for block\n" +#, c-format +msgid "Size mismatch for block with type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:209 @@ -2866,8 +2867,8 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n" #: src/fs/fs_download.c:1053 #, c-format msgid "" -"Internal error or bogus download URI (expected %u bytes at depth %u and " -"offset %llu/%llu, got %u bytes)" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" msgstr "" #: src/fs/fs_download.c:1075 @@ -3208,7 +3209,7 @@ msgid "" "You must specify one and only one directory name for automatic publication.\n" msgstr "Du måste ange en och endast en fil att avindexera.\n" -#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:888 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "" @@ -3216,15 +3217,15 @@ msgstr "" msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:893 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "" -#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:938 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "ange prioritet för innehållet" -#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:951 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "" @@ -3309,7 +3310,7 @@ msgstr "" msgid "You need to specify a URI argument.\n" msgstr "Du måste ange en och endast en fil att avindexera.\n" -#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:707 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, fuzzy, c-format msgid "Failed to parse URI: %s\n" msgstr "Fil \"%s\" har URI: %s\n" @@ -3322,7 +3323,7 @@ msgstr "" msgid "Target filename must be specified.\n" msgstr "" -#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:861 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 #: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, fuzzy, c-format msgid "Could not initialize `%s' subsystem.\n" @@ -3362,6 +3363,15 @@ msgid "" "chk/...)" msgstr "" +#: src/fs/gnunet-fs.c:128 +msgid "print a list of all indexed files" +msgstr "" + +#: src/fs/gnunet-fs.c:141 +#, fuzzy +msgid "Special file-sharing operations" +msgstr "Visa alla alternativ" + #: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "" @@ -3378,15 +3388,6 @@ msgstr "" msgid "run a testbed to measure file-sharing performance" msgstr "" -#: src/fs/gnunet-fs.c:128 -msgid "print a list of all indexed files" -msgstr "" - -#: src/fs/gnunet-fs.c:141 -#, fuzzy -msgid "Special file-sharing operations" -msgstr "Visa alla alternativ" - #: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" @@ -3437,146 +3438,146 @@ msgstr "Uppdaterar data för modul \"%s\"\n" msgid "Keywords for file `%s' (%s)\n" msgstr "Nyckelord för fil \"%s\":\n" -#: src/fs/gnunet-publish.c:577 +#: src/fs/gnunet-publish.c:582 #, fuzzy msgid "Could not publish\n" msgstr "Kunde inte köra \"%s\": %s\n" -#: src/fs/gnunet-publish.c:603 +#: src/fs/gnunet-publish.c:611 #, fuzzy msgid "Could not start publishing.\n" msgstr "Kunde inte slå upp \"%s\": %s\n" -#: src/fs/gnunet-publish.c:636 +#: src/fs/gnunet-publish.c:644 #, fuzzy, c-format msgid "Scanning directory `%s'.\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/fs/gnunet-publish.c:638 +#: src/fs/gnunet-publish.c:646 #, fuzzy, c-format msgid "Scanning file `%s'.\n" msgstr "Startade samling \"%s\".\n" -#: src/fs/gnunet-publish.c:644 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "" -#: src/fs/gnunet-publish.c:650 +#: src/fs/gnunet-publish.c:658 #, fuzzy msgid "Preprocessing complete.\n" msgstr "Nedstängning klar.\n" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:664 #, fuzzy, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "Uppdaterar data för modul \"%s\"\n" -#: src/fs/gnunet-publish.c:662 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "" -#: src/fs/gnunet-publish.c:670 +#: src/fs/gnunet-publish.c:678 #, fuzzy msgid "Error scanning directory.\n" msgstr "=\tFel vid läsning av katalog.\n" -#: src/fs/gnunet-publish.c:697 +#: src/fs/gnunet-publish.c:705 #, fuzzy, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "Namnrymd \"%s\" skapad(rot: %s).\n" -#: src/fs/gnunet-publish.c:729 +#: src/fs/gnunet-publish.c:737 #, fuzzy, c-format msgid "Failed to access `%s': %s\n" msgstr "Misslyckades att leverera \"%s\" meddelande.\n" -#: src/fs/gnunet-publish.c:746 +#: src/fs/gnunet-publish.c:754 msgid "" "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " "installed?\n" msgstr "" -#: src/fs/gnunet-publish.c:802 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "" -#: src/fs/gnunet-publish.c:809 +#: src/fs/gnunet-publish.c:817 #, fuzzy, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "Du måste ange en och endast en fil att avindexera.\n" -#: src/fs/gnunet-publish.c:815 +#: src/fs/gnunet-publish.c:823 #, fuzzy, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "Du måste ange en och endast en fil att avindexera.\n" -#: src/fs/gnunet-publish.c:824 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, fuzzy, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "Kommando \"%s\" kräver ett argument (\"%s\").\n" -#: src/fs/gnunet-publish.c:836 src/fs/gnunet-publish.c:845 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 #: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:898 +#: src/fs/gnunet-publish.c:906 msgid "enable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-publish.c:904 +#: src/fs/gnunet-publish.c:912 msgid "" "print list of extracted keywords that would be used, but do not perform " "upload" msgstr "" -#: src/fs/gnunet-publish.c:912 +#: src/fs/gnunet-publish.c:920 msgid "" "add an additional keyword for the top-level file or directory (this option " "can be specified multiple times)" msgstr "" -#: src/fs/gnunet-publish.c:919 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "" -#: src/fs/gnunet-publish.c:924 +#: src/fs/gnunet-publish.c:932 msgid "" "do not index, perform full insertion (stores entire file in encrypted form " "in GNUnet database)" msgstr "" -#: src/fs/gnunet-publish.c:931 +#: src/fs/gnunet-publish.c:939 msgid "" "specify ID of an updated version to be published in the future (for " "namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:944 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" msgstr "" -#: src/fs/gnunet-publish.c:956 +#: src/fs/gnunet-publish.c:964 msgid "" "only simulate the process but do not do any actual publishing (useful to " "compute URIs)" msgstr "" -#: src/fs/gnunet-publish.c:963 +#: src/fs/gnunet-publish.c:971 msgid "" "set the ID of this version of the publication (for namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:971 +#: src/fs/gnunet-publish.c:979 msgid "" "URI to be published (can be used instead of passing a file to add keywords " "to the file with the respective URI)" msgstr "" -#: src/fs/gnunet-publish.c:989 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "" @@ -3992,7 +3993,7 @@ msgstr "Kunde inte komma åt namnrymdsinformation.\n" msgid "Unindex a file that was previously indexed with gnunet-publish." msgstr "" -#: src/gns/gns_tld_api.c:292 +#: src/gns/gns_tld_api.c:293 msgid "Expected a base32-encoded public zone key\n" msgstr "" @@ -4073,7 +4074,53 @@ msgstr "" msgid "look for GNS2DNS records instead of ANY" msgstr "" -#: src/gns/gnunet-gns-import.c:486 +#: src/gns/gnunet-gns.c:257 +#, fuzzy, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "\"%s\" är inte tillgänglig." + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 +#, fuzzy, c-format +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "Misslyckades att leverera \"%s\" meddelande.\n" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" + +#: src/gns/gnunet-gns.c:305 +#, c-format +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" + +#: src/gns/gnunet-gns.c:340 +msgid "Lookup a record for the given name" +msgstr "" + +#: src/gns/gnunet-gns.c:346 +#, fuzzy +msgid "Specify the type of the record to lookup" +msgstr "ange prioritet för innehållet" + +#: src/gns/gnunet-gns.c:352 +#, fuzzy +msgid "Specify a timeout for the lookup" +msgstr "ange prioritet för innehållet" + +#: src/gns/gnunet-gns.c:356 +msgid "No unneeded output" +msgstr "" + +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" + +#: src/gns/gnunet-gns.c:375 +#, fuzzy +msgid "GNUnet GNS resolver tool" +msgstr "Spåra GNUnets nätverkstopologi." + +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "" @@ -4193,52 +4240,6 @@ msgstr "" msgid "GNUnet GNS proxy" msgstr "" -#: src/gns/gnunet-gns.c:257 -#, fuzzy, c-format -msgid "`%s' is not a valid DNS domain name\n" -msgstr "\"%s\" är inte tillgänglig." - -#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 -#, fuzzy, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "Misslyckades att leverera \"%s\" meddelande.\n" - -#: src/gns/gnunet-gns.c:281 -msgid "Cannot resolve using GNS: GNUnet peer not running\n" -msgstr "" - -#: src/gns/gnunet-gns.c:305 -#, c-format -msgid "Invalid typename specified, assuming `ANY'\n" -msgstr "" - -#: src/gns/gnunet-gns.c:340 -msgid "Lookup a record for the given name" -msgstr "" - -#: src/gns/gnunet-gns.c:346 -#, fuzzy -msgid "Specify the type of the record to lookup" -msgstr "ange prioritet för innehållet" - -#: src/gns/gnunet-gns.c:352 -#, fuzzy -msgid "Specify a timeout for the lookup" -msgstr "ange prioritet för innehållet" - -#: src/gns/gnunet-gns.c:356 -msgid "No unneeded output" -msgstr "" - -#: src/gns/gnunet-gns.c:361 -msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" -msgstr "" - -#: src/gns/gnunet-gns.c:375 -#, fuzzy -msgid "GNUnet GNS resolver tool" -msgstr "Spåra GNUnets nätverkstopologi." - #: src/gns/gnunet-service-gns.c:505 #, fuzzy msgid "Properly base32-encoded public key required" @@ -4250,8 +4251,8 @@ msgid "Failed to connect to the namecache!\n" msgstr "Misslyckades att ansluta till gnunetd.\n" #: src/gns/gnunet-service-gns.c:560 -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:444 -#: src/zonemaster/gnunet-service-zonemaster.c:887 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 #, fuzzy msgid "Could not connect to DHT!\n" msgstr "Kunde inte ansluta till gnunetd.\n" @@ -4295,66 +4296,70 @@ msgstr "" msgid "VPN returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1909 +#: src/gns/gnunet-service-gns_resolver.c:1910 #, c-format msgid "Name `%s' cannot be converted to IDNA." msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1922 +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1965 +#: src/gns/gnunet-service-gns_resolver.c:1966 #, fuzzy, c-format msgid "GNS lookup failed (zero records found for `%s')\n" msgstr "%d filer hittades i katalog.\n" -#: src/gns/gnunet-service-gns_resolver.c:2385 +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2408 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, fuzzy, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n" -#: src/gns/gnunet-service-gns_resolver.c:2576 +#: src/gns/gnunet-service-gns_resolver.c:2581 #, c-format msgid "GNS namecache returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2716 +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:167 +#: src/gns/plugin_gnsrecord_gns.c:174 #, fuzzy, c-format -msgid "Unable to parse PKEY record `%s'\n" +msgid "Unable to parse zone key record `%s'\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/gns/plugin_gnsrecord_gns.c:197 +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" +msgstr "" + +#: src/gns/plugin_gnsrecord_gns.c:213 #, fuzzy, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/gns/plugin_gnsrecord_gns.c:213 +#: src/gns/plugin_gnsrecord_gns.c:229 #, fuzzy, c-format msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" -#: src/gns/plugin_gnsrecord_gns.c:237 +#: src/gns/plugin_gnsrecord_gns.c:253 #, fuzzy, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/gns/plugin_gnsrecord_gns.c:269 +#: src/gns/plugin_gnsrecord_gns.c:285 #, fuzzy, c-format msgid "Unable to parse BOX record string `%s'\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/gns/plugin_rest_gns.c:447 +#: src/gns/plugin_rest_gns.c:448 #, fuzzy msgid "Gns REST API initialized\n" msgstr " Anslutning misslyckades\n" @@ -4665,7 +4670,7 @@ msgid "# hostlist URIs written to file" msgstr "" #: src/hostlist/gnunet-daemon-hostlist_client.c:1657 -#: src/transport/plugin_transport_http_client.c:2301 +#: src/transport/plugin_transport_http_client.c:2300 #, c-format msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" msgstr "" @@ -4794,57 +4799,61 @@ msgstr "\"%s\" är inte tillgänglig." msgid "Could not start hostlist HTTP server on port %u\n" msgstr "" -#: src/identity/gnunet-identity.c:209 +#: src/identity/gnunet-identity.c:214 #, fuzzy, c-format msgid "Failed to create ego: %s\n" msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" -#: src/identity/gnunet-identity.c:250 +#: src/identity/gnunet-identity.c:255 #, fuzzy, c-format msgid "Failed to set default ego: %s\n" msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" -#: src/identity/gnunet-identity.c:446 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "" -#: src/identity/gnunet-identity.c:451 +#: src/identity/gnunet-identity.c:467 msgid "delete ego NAME " msgstr "" -#: src/identity/gnunet-identity.c:457 +#: src/identity/gnunet-identity.c:473 msgid "" "set the private key for the identity to PRIVATE_KEY (use together with -C)" msgstr "" -#: src/identity/gnunet-identity.c:461 +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + +#: src/identity/gnunet-identity.c:482 msgid "display all egos" msgstr "" -#: src/identity/gnunet-identity.c:465 +#: src/identity/gnunet-identity.c:486 msgid "reduce output" msgstr "" -#: src/identity/gnunet-identity.c:472 +#: src/identity/gnunet-identity.c:493 msgid "" "set default identity to NAME for a subsystem SUBSYSTEM (use together with -" "s) or restrict results to NAME (use together with -d)" msgstr "" -#: src/identity/gnunet-identity.c:476 +#: src/identity/gnunet-identity.c:497 msgid "run in monitor mode egos" msgstr "" -#: src/identity/gnunet-identity.c:480 +#: src/identity/gnunet-identity.c:501 msgid "display private keys as well" msgstr "" -#: src/identity/gnunet-identity.c:487 +#: src/identity/gnunet-identity.c:508 msgid "" "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" msgstr "" -#: src/identity/gnunet-identity.c:502 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "" @@ -4880,27 +4889,27 @@ msgstr "" msgid "no matching ego found" msgstr "" -#: src/identity/gnunet-service-identity.c:1072 +#: src/identity/gnunet-service-identity.c:1133 #, fuzzy, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/identity/gnunet-service-identity.c:1130 +#: src/identity/gnunet-service-identity.c:1191 #, fuzzy, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" msgstr "Kunde inte spara konfigurationsfil \"%s\":" -#: src/identity/gnunet-service-identity.c:1139 +#: src/identity/gnunet-service-identity.c:1200 #, fuzzy, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/identity/plugin_rest_identity.c:1384 +#: src/identity/plugin_rest_identity.c:1385 #, fuzzy msgid "Identity REST API initialized\n" msgstr " Anslutning misslyckades\n" -#: src/json/json.c:133 +#: src/json/json.c:139 #, fuzzy, c-format msgid "Failed to parse JSON in option `%s': %s (%s)\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" @@ -4945,7 +4954,7 @@ msgstr "Ogiltigt argument: \"%s\"\n" msgid "You must specify a name\n" msgstr "Du måste ange en mottagare!\n" -#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1640 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "" @@ -4954,22 +4963,22 @@ msgstr "" msgid "specifies the public key of the zone to look in" msgstr "ange prioritet för innehållet" -#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1701 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 #, fuzzy msgid "GNUnet zone manipulation tool" msgstr "GNUnet-konfiguration" -#: src/namecache/namecache_api.c:293 +#: src/namecache/namecache_api.c:285 msgid "Namecache failed to cache block" msgstr "" -#: src/namecache/namecache_api.c:381 +#: src/namecache/namecache_api.c:373 #, fuzzy msgid "Error communicating with namecache service" msgstr "Skriv ut information om GNUnets motparter." #: src/namecache/plugin_namecache_flat.c:118 -#: src/namecache/plugin_namecache_flat.c:256 +#: src/namecache/plugin_namecache_flat.c:253 #: src/namestore/plugin_namestore_flat.c:176 #: src/namestore/plugin_namestore_flat.c:424 #: src/peerstore/plugin_peerstore_flat.c:380 @@ -4991,7 +5000,7 @@ msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" msgid "Unable to read file: %s.\n" msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" -#: src/namecache/plugin_namecache_flat.c:410 +#: src/namecache/plugin_namecache_flat.c:404 msgid "flat plugin running\n" msgstr "" @@ -5003,70 +5012,6 @@ msgstr "" msgid "Failed to setup database at `%s'\n" msgstr "Fel vid %s:%d.\n" -#: src/namestore/gnunet-namestore-fcfsd.c:552 -#, fuzzy, c-format -msgid "Unsupported form value `%s'\n" -msgstr "Kommando \"%s\" stöds ej. Avbryter.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:579 -#, fuzzy, c-format -msgid "Failed to create record for domain `%s': %s\n" -msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:600 -msgid "Error when mapping zone to name\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:632 -#, c-format -msgid "Found existing name `%s' for the given key\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:694 -#, c-format -msgid "Found %u existing records for domain `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:784 -#, fuzzy, c-format -msgid "Failed to create page for `%s'\n" -msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:803 -#, fuzzy, c-format -msgid "Failed to setup post processor for `%s'\n" -msgstr "Misslyckades att läsa kompislista från \"%s\"\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:840 -msgid "Domain name must not contain `.'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:849 -msgid "Domain name must not contain `+'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1084 -msgid "No ego configured for `fcfsd` subsystem\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1115 -#, fuzzy -msgid "Failed to start HTTP server\n" -msgstr "Misslyckades att starta samling.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1163 -#, fuzzy -msgid "Failed to connect to identity\n" -msgstr "Misslyckades att ansluta till gnunetd.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1190 -msgid "name of the zone that is to be managed by FCFSD" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1210 -msgid "GNU Name System First Come First Serve name registration service" -msgstr "" - #: src/namestore/gnunet-namestore.c:334 #, fuzzy, c-format msgid "Adding record failed: %s\n" @@ -5088,11 +5033,17 @@ msgstr "" "\n" "Fel vid uppladdning av fil: %s\n" -#: src/namestore/gnunet-namestore.c:656 src/namestore/gnunet-namestore.c:667 +#: src/namestore/gnunet-namestore.c:656 #, c-format msgid "A %s record exists already under `%s', no other records can be added.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:680 #, c-format msgid "" @@ -5100,11 +5051,16 @@ msgid "" "zone.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:696 src/namestore/gnunet-namestore.c:710 +#: src/namestore/gnunet-namestore.c:696 #, c-format msgid "Records already exist under `%s', cannot add `%s' record.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:726 #, c-format msgid "" @@ -5135,7 +5091,7 @@ msgstr "" #: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 #: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 #: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 -#: src/namestore/gnunet-namestore.c:1229 +#: src/namestore/gnunet-namestore.c:1228 #, fuzzy, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "Konfigurationsfil \"%s\" skapad.\n" @@ -5151,7 +5107,7 @@ msgstr "Ogiltiga argument: " #: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 #: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 -#: src/namestore/gnunet-namestore.c:1231 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "" @@ -5170,7 +5126,7 @@ msgstr "" msgid "Value `%s' invalid for record type `%s'\n" msgstr "%s: symbolvärde \"%s\" ogiltigt för %s\n" -#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1238 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, fuzzy, c-format msgid "Invalid time format `%s'\n" msgstr "Ogiltigt format för IP: \"%s\"\n" @@ -5179,23 +5135,23 @@ msgstr "Ogiltigt format för IP: \"%s\"\n" msgid "del" msgstr "" -#: src/namestore/gnunet-namestore.c:1198 +#: src/namestore/gnunet-namestore.c:1197 #, fuzzy, c-format msgid "Invalid public key for reverse lookup `%s'\n" msgstr "Ogiltigt argument: \"%s\"\n" -#: src/namestore/gnunet-namestore.c:1221 +#: src/namestore/gnunet-namestore.c:1220 #: src/peerinfo-tool/gnunet-peerinfo.c:736 #, fuzzy, c-format msgid "Invalid URI `%s'\n" msgstr "Ogiltiga argument: " -#: src/namestore/gnunet-namestore.c:1291 +#: src/namestore/gnunet-namestore.c:1290 #, c-format msgid "Label `%s' contains `.' which is not allowed\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1341 +#: src/namestore/gnunet-namestore.c:1340 #, c-format msgid "" "No default identity configured for `namestore' subsystem\n" @@ -5203,106 +5159,175 @@ msgid "" "Run gnunet-identity -d to get a list of choices for $NAME\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1406 +#: src/namestore/gnunet-namestore.c:1405 #, fuzzy, c-format msgid "Superfluous command line arguments (starting with `%s') ignored\n" msgstr "Onödiga argument (ignorerade).\n" -#: src/namestore/gnunet-namestore.c:1435 +#: src/namestore/gnunet-namestore.c:1434 #, fuzzy, c-format msgid "Cannot connect to identity service\n" msgstr "Kunde inte ansluta till gnunetd.\n" -#: src/namestore/gnunet-namestore.c:1482 +#: src/namestore/gnunet-namestore.c:1481 msgid "Empty record line argument is not allowed.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1494 +#: src/namestore/gnunet-namestore.c:1493 #, c-format msgid "Invalid expiration time `%s' (must be without unit)\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1506 src/namestore/gnunet-namestore.c:1522 -#: src/namestore/gnunet-namestore.c:1539 +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 #, fuzzy, c-format msgid "Missing entries in record line `%s'.\n" msgstr "Kunde inte slå upp \"%s\": %s\n" -#: src/namestore/gnunet-namestore.c:1514 +#: src/namestore/gnunet-namestore.c:1513 #, fuzzy, c-format msgid "Unknown record type `%s'\n" msgstr "Okänd operation \"%s\"\n" -#: src/namestore/gnunet-namestore.c:1552 +#: src/namestore/gnunet-namestore.c:1551 #, fuzzy, c-format msgid "Invalid record data for type %s: `%s'.\n" msgstr "Ogiltigt format för IP: \"%s\"\n" -#: src/namestore/gnunet-namestore.c:1609 +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "" -#: src/namestore/gnunet-namestore.c:1612 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "" -#: src/namestore/gnunet-namestore.c:1616 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "" -#: src/namestore/gnunet-namestore.c:1623 +#: src/namestore/gnunet-namestore.c:1622 msgid "" "expiration time for record to use (for adding only), \"never\" is possible" msgstr "" -#: src/namestore/gnunet-namestore.c:1629 +#: src/namestore/gnunet-namestore.c:1628 #, fuzzy msgid "set the desired nick name for the zone" msgstr "Skriv ut information om GNUnets motparter." -#: src/namestore/gnunet-namestore.c:1634 +#: src/namestore/gnunet-namestore.c:1633 #, fuzzy msgid "monitor changes in the namestore" msgstr "Misslyckades att ansluta till gnunetd.\n" -#: src/namestore/gnunet-namestore.c:1646 +#: src/namestore/gnunet-namestore.c:1645 #, fuzzy msgid "determine our name for the given PKEY" msgstr "Skriv ut information om GNUnets motparter." -#: src/namestore/gnunet-namestore.c:1653 +#: src/namestore/gnunet-namestore.c:1652 msgid "" "set record set to values given by (possibly multiple) RECORDLINES; can be " "specified multiple times" msgstr "" -#: src/namestore/gnunet-namestore.c:1659 +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "" -#: src/namestore/gnunet-namestore.c:1664 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1670 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "" -#: src/namestore/gnunet-namestore.c:1674 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "" -#: src/namestore/gnunet-namestore.c:1680 +#: src/namestore/gnunet-namestore.c:1679 msgid "" "create shadow record (only valid if all other records of the same type have " "expired" msgstr "" -#: src/namestore/gnunet-namestore.c:1686 +#: src/namestore/gnunet-namestore.c:1685 #, fuzzy msgid "name of the ego controlling the zone" msgstr "Visa värde av alternativet" +#: src/namestore/gnunet-namestore-fcfsd.c:552 +#, fuzzy, c-format +msgid "Unsupported form value `%s'\n" +msgstr "Kommando \"%s\" stöds ej. Avbryter.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:579 +#, fuzzy, c-format +msgid "Failed to create record for domain `%s': %s\n" +msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 +#, c-format +msgid "Found existing name `%s' for the given key\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "=\tFel vid läsning av katalog.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:707 +#, c-format +msgid "Found %u existing records for domain `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:796 +#, fuzzy, c-format +msgid "Failed to create page for `%s'\n" +msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:815 +#, fuzzy, c-format +msgid "Failed to setup post processor for `%s'\n" +msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:850 +msgid "Domain name must not contain `.'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:859 +msgid "Domain name must not contain `+'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1094 +msgid "No ego configured for `fcfsd` subsystem\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1125 +#, fuzzy +msgid "Failed to start HTTP server\n" +msgstr "Misslyckades att starta samling.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1173 +#, fuzzy +msgid "Failed to connect to identity\n" +msgstr "Misslyckades att ansluta till gnunetd.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 +msgid "GNU Name System First Come First Serve name registration service" +msgstr "" + #: src/namestore/gnunet-service-namestore.c:866 #, fuzzy, c-format msgid "Failed to replicate block in namecache: %s\n" @@ -5330,7 +5355,7 @@ msgstr "" msgid "Namestore database file `%s' malformed\n" msgstr "" -#: src/namestore/plugin_namestore_flat.c:789 +#: src/namestore/plugin_namestore_flat.c:792 msgid "Flat file database running\n" msgstr "" @@ -5625,6 +5650,11 @@ msgstr "" msgid "`upnpc' command not found\n" msgstr "" +#: src/nse/gnunet-nse.c:124 +#, fuzzy +msgid "Show network size estimates from NSE service." +msgstr "# byte mottogs via TCP" + #: src/nse/gnunet-nse-profiler.c:857 #, fuzzy msgid "limit to the number of connections to NSE services, 0 for none" @@ -5642,24 +5672,74 @@ msgstr "" msgid "Number of peers to run in each round, separated by commas" msgstr "" -#: src/nse/gnunet-nse-profiler.c:900 -msgid "delay between rounds" +#: src/nse/gnunet-nse-profiler.c:900 +msgid "delay between rounds" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:912 +#, fuzzy +msgid "Measure quality and performance of the NSE service." +msgstr "Kan inte tillgå tjänsten" + +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 +msgid "Value is too large.\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:175 +#, fuzzy, c-format +msgid "Removing expired address of transport `%s'\n" +msgstr "Tillgängliga transport(er): %s\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:306 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s': %s\n" +msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s'\n" +msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:426 +msgid "# peers known" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:468 +#, c-format +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:624 +#, fuzzy, c-format +msgid "Scanning directory `%s'\n" +msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:631 +#, c-format +msgid "Still no peers found in `%s'!\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:1024 +#, fuzzy, c-format +msgid "Cleaning up directory `%s'\n" +msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:1319 +#, c-format +msgid "Importing HELLOs from `%s'\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:912 -#, fuzzy -msgid "Measure quality and performance of the NSE service." -msgstr "Kan inte tillgå tjänsten" +#: src/peerinfo/gnunet-service-peerinfo.c:1332 +msgid "Skipping import of included HELLOs\n" +msgstr "" -#: src/nse/gnunet-nse.c:124 +#: src/peerinfo/peerinfo_api.c:217 #, fuzzy -msgid "Show network size estimates from NSE service." -msgstr "# byte mottogs via TCP" - -#: src/nse/gnunet-service-nse.c:1443 -#: src/revocation/gnunet-service-revocation.c:834 src/util/gnunet-scrypt.c:257 -msgid "Value is too large.\n" -msgstr "" +msgid "Failed to receive response from `PEERINFO' service." +msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n" #: src/peerinfo-tool/gnunet-peerinfo.c:237 #, fuzzy, c-format @@ -5757,61 +5837,6 @@ msgstr "Kunde inte slå upp \"%s\": %s\n" msgid "Peerinfo REST API initialized\n" msgstr " Anslutning misslyckades\n" -#: src/peerinfo/gnunet-service-peerinfo.c:175 -#, fuzzy, c-format -msgid "Removing expired address of transport `%s'\n" -msgstr "Tillgängliga transport(er): %s\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:306 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s': %s\n" -msgstr "Misslyckades att läsa kompislista från \"%s\"\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:323 -#: src/peerinfo/gnunet-service-peerinfo.c:348 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s'\n" -msgstr "Misslyckades att läsa kompislista från \"%s\"\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:426 -msgid "# peers known" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:468 -#, c-format -msgid "" -"File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:624 -#, fuzzy, c-format -msgid "Scanning directory `%s'\n" -msgstr "Misslyckades att läsa kompislista från \"%s\"\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:631 -#, c-format -msgid "Still no peers found in `%s'!\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1024 -#, fuzzy, c-format -msgid "Cleaning up directory `%s'\n" -msgstr "Misslyckades att läsa kompislista från \"%s\"\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1319 -#, c-format -msgid "Importing HELLOs from `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1332 -msgid "Skipping import of included HELLOs\n" -msgstr "" - -#: src/peerinfo/peerinfo_api.c:217 -#, fuzzy -msgid "Failed to receive response from `PEERINFO' service." -msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n" - #: src/peerstore/gnunet-peerstore.c:92 msgid "peerstore" msgstr "" @@ -6007,7 +6032,7 @@ msgstr "" msgid "re:claimID command line tool" msgstr "" -#: src/reclaim/plugin_rest_openid_connect.c:2618 +#: src/reclaim/plugin_rest_openid_connect.c:2613 #, fuzzy msgid "OpenID Connect REST API initialized\n" msgstr " Anslutning misslyckades\n" @@ -6170,119 +6195,136 @@ msgstr "" msgid "Internal error, key revocation might have failed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:251 +#: src/revocation/gnunet-revocation.c:252 msgid "Cancelling calculation.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:296 +#: src/revocation/gnunet-revocation.c:299 #, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:335 +#: src/revocation/gnunet-revocation.c:339 #, fuzzy, c-format msgid "Ego `%s' not found.\n" msgstr "\"%s\" misslyckades: tabell hittades inte!\n" -#: src/revocation/gnunet-revocation.c:349 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:359 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "" -#: src/revocation/gnunet-revocation.c:371 +#: src/revocation/gnunet-revocation.c:378 msgid "Continuing calculation where left off...\n" msgstr "" -#: src/revocation/gnunet-revocation.c:378 +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "" -#: src/revocation/gnunet-revocation.c:416 +#: src/revocation/gnunet-revocation.c:423 #, fuzzy, c-format msgid "Public key `%s' malformed\n" msgstr "Ogiltigt argument: \"%s\"\n" -#: src/revocation/gnunet-revocation.c:426 +#: src/revocation/gnunet-revocation.c:433 msgid "" "Testing and revoking at the same time is not allowed, only executing test.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:456 +#: src/revocation/gnunet-revocation.c:463 #, fuzzy msgid "No filename to store revocation certificate given.\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/revocation/gnunet-revocation.c:471 +#: src/revocation/gnunet-revocation.c:480 #, fuzzy, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/revocation/gnunet-revocation.c:493 +#: src/revocation/gnunet-revocation.c:488 +#, fuzzy, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + +#: src/revocation/gnunet-revocation.c:510 #, fuzzy msgid "No action specified. Nothing to do.\n" msgstr "Inget tabellnamn angivet, använder \"%s\".\n" -#: src/revocation/gnunet-revocation.c:512 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "" -#: src/revocation/gnunet-revocation.c:520 +#: src/revocation/gnunet-revocation.c:537 msgid "" "revoke the private key associated for the the private key associated with " "the ego NAME " msgstr "" -#: src/revocation/gnunet-revocation.c:527 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "" -#: src/revocation/gnunet-revocation.c:534 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "" -#: src/revocation/gnunet-revocation.c:540 +#: src/revocation/gnunet-revocation.c:557 #, fuzzy msgid "number of epochs to calculate for" msgstr "antal iterationer" -#: src/revocation/gnunet-service-revocation.c:454 +#: src/revocation/gnunet-service-revocation.c:494 #, fuzzy msgid "# unsupported revocations received via set union" msgstr "# byte mottogs via TCP" -#: src/revocation/gnunet-service-revocation.c:464 +#: src/revocation/gnunet-service-revocation.c:504 #, fuzzy msgid "# revocation messages received via set union" msgstr "# krypterade PONG-meddelanden mottagna" -#: src/revocation/gnunet-service-revocation.c:469 +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:473 +#: src/revocation/gnunet-service-revocation.c:513 #, fuzzy msgid "# revocation set unions failed" msgstr "# sessionsnycklar accepterade" -#: src/revocation/gnunet-service-revocation.c:481 +#: src/revocation/gnunet-service-revocation.c:521 #, fuzzy msgid "# revocation set unions completed" msgstr "# klartext PONG-meddelanden mottagna" -#: src/revocation/gnunet-service-revocation.c:519 +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:871 +#: src/revocation/gnunet-service-revocation.c:912 #, fuzzy msgid "Could not open revocation database file!" msgstr "Kunde inte ansluta till gnunetd.\n" +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" + +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" + +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" + #: src/rps/gnunet-rps-profiler.c:3200 msgid "duration of the profiling" msgstr "" @@ -6302,18 +6344,6 @@ msgstr "antal iterationer" msgid "Measure quality and performance of the RPS service." msgstr "Kan inte tillgå tjänsten" -#: src/rps/gnunet-rps.c:270 -msgid "Seed a PeerID" -msgstr "" - -#: src/rps/gnunet-rps.c:275 -msgid "Get updates of view (0 for infinite updates)" -msgstr "" - -#: src/rps/gnunet-rps.c:279 -msgid "Get peers from biased stream" -msgstr "" - #: src/scalarproduct/gnunet-scalarproduct.c:229 #, fuzzy msgid "You must specify at least one message ID to check!\n" @@ -6369,10 +6399,10 @@ msgstr "" msgid "Calculate the Vectorproduct with a GNUnet peer." msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #, fuzzy msgid "Connect to CADET failed\n" msgstr " Anslutning misslyckades (fel?)\n" @@ -6398,7 +6428,7 @@ msgid "also profile decryption" msgstr "" #: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 -#: src/setu/gnunet-service-setu.c:3635 +#: src/setu/gnunet-service-setu.c:3633 #, fuzzy msgid "Could not connect to CADET service\n" msgstr "Kunde inte ansluta till gnunetd.\n" @@ -6727,6 +6757,16 @@ msgstr "" msgid "%.s Unknown result code." msgstr "" +#: src/testbed/gnunet_testbed_mpi_spawn.c:119 +#, fuzzy +msgid "Waiting for child to exit.\n" +msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n" + +#: src/testbed/gnunet_testbed_mpi_spawn.c:242 +#, fuzzy, c-format +msgid "Spawning process `%s'\n" +msgstr "Startade samling \"%s\".\n" + #: src/testbed/gnunet-testbed-profiler.c:290 msgid "tolerate COUNT number of continious timeout failures" msgstr "" @@ -6738,16 +6778,6 @@ msgid "" "signal is received" msgstr "" -#: src/testbed/gnunet_testbed_mpi_spawn.c:119 -#, fuzzy -msgid "Waiting for child to exit.\n" -msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n" - -#: src/testbed/gnunet_testbed_mpi_spawn.c:242 -#, fuzzy, c-format -msgid "Spawning process `%s'\n" -msgstr "Startade samling \"%s\".\n" - #: src/testbed/testbed_api.c:399 #, fuzzy, c-format msgid "Adding host %u failed with error: %s\n" @@ -6868,7 +6898,7 @@ msgstr "" #: src/testbed/testbed_api_topology.c:1153 #, fuzzy, c-format -msgid "Ignoring to connect peer %u to peer %u\n" +msgid "Ignoring to connect peer %lu to peer %lu\n" msgstr "Kan inte ansluta till %u.%u.%u.%u:%u: %s\n" #: src/testing/gnunet-testing.c:185 @@ -7045,7 +7075,7 @@ msgid "GNUnet topology control" msgstr "" #: src/transport/gnunet-communicator-tcp.c:3221 -#: src/transport/gnunet-communicator-udp.c:2995 +#: src/transport/gnunet-communicator-udp.c:3076 #: src/transport/gnunet-service-tng.c:10014 #: src/transport/gnunet-service-transport.c:2626 #, fuzzy @@ -7056,7 +7086,7 @@ msgstr "GNUnet-konfiguration" msgid "GNUnet TCP communicator" msgstr "" -#: src/transport/gnunet-communicator-udp.c:3067 +#: src/transport/gnunet-communicator-udp.c:3148 msgid "GNUnet UDP communicator" msgstr "" @@ -7081,6 +7111,10 @@ msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" msgid "GNUnet UNIX domain socket communicator" msgstr "" +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + #: src/transport/gnunet-service-transport.c:445 msgid "# messages dropped due to slow client" msgstr "" @@ -7124,10 +7158,6 @@ msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n" msgid "Adding blacklisting entry for peer `%s':`%s'\n" msgstr "" -#: src/transport/gnunet-service-transport_ats.c:137 -msgid "# Addresses given to ATS" -msgstr "" - #: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "" @@ -7464,46 +7494,6 @@ msgstr "" msgid "# HELLOs given to peerinfo" msgstr "Meddelande mottaget från klient är ogiltig.\n" -#: src/transport/gnunet-transport-profiler.c:220 -#, c-format -msgid "%llu B in %llu ms == %.2f KB/s!\n" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:577 -msgid "send data to peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:581 -#, fuzzy -msgid "receive data from peer" -msgstr "# byte mottagna av typen %d" - -#: src/transport/gnunet-transport-profiler.c:586 -#, fuzzy -msgid "iterations" -msgstr "Visa alla alternativ" - -#: src/transport/gnunet-transport-profiler.c:591 -#, fuzzy -msgid "number of messages to send" -msgstr "antal meddelanden att använda per iteration" - -#: src/transport/gnunet-transport-profiler.c:596 -#, fuzzy -msgid "message size to use" -msgstr "meddelandestorlek" - -#: src/transport/gnunet-transport-profiler.c:601 -#: src/transport/gnunet-transport.c:1404 -msgid "peer identity" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:614 -#: src/transport/gnunet-transport.c:1426 -#, fuzzy -msgid "Direct access to transport service." -msgstr "Misslyckades att ansluta till gnunetd.\n" - #: src/transport/gnunet-transport.c:406 #, fuzzy, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" @@ -7643,6 +7633,11 @@ msgstr "Skriv ut information om GNUnets motparter." msgid "do not resolve hostnames" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 +msgid "peer identity" +msgstr "" + #: src/transport/gnunet-transport.c:1408 msgid "monitor plugin sessions" msgstr "" @@ -7651,7 +7646,42 @@ msgstr "" msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "" -#: src/transport/plugin_transport_http_client.c:1489 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 +#, fuzzy +msgid "Direct access to transport service." +msgstr "Misslyckades att ansluta till gnunetd.\n" + +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:581 +#, fuzzy +msgid "receive data from peer" +msgstr "# byte mottagna av typen %d" + +#: src/transport/gnunet-transport-profiler.c:586 +#, fuzzy +msgid "iterations" +msgstr "Visa alla alternativ" + +#: src/transport/gnunet-transport-profiler.c:591 +#, fuzzy +msgid "number of messages to send" +msgstr "antal meddelanden att använda per iteration" + +#: src/transport/gnunet-transport-profiler.c:596 +#, fuzzy +msgid "message size to use" +msgstr "meddelandestorlek" + +#: src/transport/plugin_transport_http_client.c:1488 #: src/transport/plugin_transport_http_server.c:2331 #: src/transport/plugin_transport_http_server.c:3562 #: src/transport/plugin_transport_tcp.c:3773 @@ -7659,25 +7689,25 @@ msgstr "" msgid "TCP_STEALTH not supported on this platform.\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2141 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2190 +#: src/transport/plugin_transport_http_client.c:2189 #: src/transport/plugin_transport_http_server.c:3276 #, fuzzy, c-format msgid "Shutting down plugin `%s'\n" msgstr "Testar transport(er) %s\n" -#: src/transport/plugin_transport_http_client.c:2207 +#: src/transport/plugin_transport_http_client.c:2206 #: src/transport/plugin_transport_http_server.c:3346 #, fuzzy, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "" "Uppladdning av \"%s\" klar, aktuell genomsnittshastighet är %8.3f kbps.\n" -#: src/transport/plugin_transport_http_client.c:2241 +#: src/transport/plugin_transport_http_client.c:2240 #, fuzzy, c-format msgid "Maximum number of requests is %u\n" msgstr "Maximalt antal chattklienter uppnått.\n" @@ -7686,7 +7716,7 @@ msgstr "Maximalt antal chattklienter uppnått.\n" #, c-format msgid "" "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " -"size %u\n" +"size %lu\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2040 @@ -7726,7 +7756,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2935 -#: src/transport/plugin_transport_udp.c:3397 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -7938,69 +7968,69 @@ msgstr "" msgid "TCP transport advertises itself as being on port %llu\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3169 +#: src/transport/plugin_transport_udp_broadcasting.c:169 +#, fuzzy +msgid "# Multicast HELLO beacons received via UDP" +msgstr "# krypterade PONG-meddelanden mottagna" + +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:571 +#, c-format +msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" +msgstr "" + +#: src/transport/plugin_transport_udp.c:3170 #, c-format msgid "" "UDP could not transmit message to `%s': Network seems down, please check " "your network configuration\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3182 +#: src/transport/plugin_transport_udp.c:3183 msgid "" "UDP could not transmit IPv6 message! Please check your network configuration " "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3465 -#: src/transport/plugin_transport_udp.c:3550 +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Misslyckades att binda till UDP6-port %d.\n" -#: src/transport/plugin_transport_udp.c:3479 +#: src/transport/plugin_transport_udp.c:3480 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3558 +#: src/transport/plugin_transport_udp.c:3559 #, fuzzy msgid "Failed to open UDP sockets\n" msgstr "Misslyckades att binda till UDP6-port %d.\n" -#: src/transport/plugin_transport_udp.c:3628 -#: src/transport/plugin_transport_udp.c:3641 +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3666 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv4 address" msgstr "\"%s\" är inte tillgänglig." -#: src/transport/plugin_transport_udp.c:3688 +#: src/transport/plugin_transport_udp.c:3689 #, fuzzy msgid "must be valid IPv6 address" msgstr "\"%s\" är inte tillgänglig." -#: src/transport/plugin_transport_udp.c:3749 +#: src/transport/plugin_transport_udp.c:3750 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" -#: src/transport/plugin_transport_udp_broadcasting.c:169 -#, fuzzy -msgid "# Multicast HELLO beacons received via UDP" -msgstr "# krypterade PONG-meddelanden mottagna" - -#: src/transport/plugin_transport_udp_broadcasting.c:553 -msgid "" -"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:571 -#, c-format -msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "" - #: src/transport/plugin_transport_unix.c:1396 #, fuzzy, c-format msgid "Cannot bind to `%s'\n" @@ -8184,7 +8214,7 @@ msgid "do daemonize (detach from terminal)" msgstr "" #: src/transport/tcp_service_legacy.c:1397 -#: src/transport/transport-testing2.c:983 src/util/service.c:2072 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 #: src/util/service.c:2084 #, fuzzy, c-format msgid "Malformed configuration file `%s', exit ...\n" @@ -8244,7 +8274,7 @@ msgstr "" #: src/util/bio.c:359 #, c-format -msgid "String `%s' longer than allowed (%u > %u)" +msgid "String `%s' longer than allowed (%u > %lu)" msgstr "" #: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 @@ -8975,63 +9005,63 @@ msgstr "" msgid "Failed to expand `$HOME': environment variable `HOME' not set" msgstr "" -#: src/util/strings.c:1240 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "" -#: src/util/strings.c:1248 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1255 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1263 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "" -#: src/util/strings.c:1272 +#: src/util/strings.c:1273 #, fuzzy, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "Ogiltigt svar på \"%s\".\n" -#: src/util/strings.c:1499 src/util/strings.c:1510 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "" -#: src/util/strings.c:1519 +#: src/util/strings.c:1520 #, fuzzy, c-format msgid "Malformed port policy `%s'\n" msgstr "Misslyckades att starta samling.\n" -#: src/util/strings.c:1602 src/util/strings.c:1631 src/util/strings.c:1678 -#: src/util/strings.c:1698 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "Ogiltigt format för IP: \"%s\"\n" -#: src/util/strings.c:1656 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "Ogiltig nätverksnotation (\"/%d\" är inte giltig i IPv4 CIDR)." -#: src/util/strings.c:1707 +#: src/util/strings.c:1708 #, fuzzy, c-format msgid "Invalid format: `%s'\n" msgstr "Ogiltigt format för IP: \"%s\"\n" -#: src/util/strings.c:1760 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "Ogiltig nätverksnotation (slutar inte med \";\": \"%s\")\n" -#: src/util/strings.c:1810 +#: src/util/strings.c:1811 #, fuzzy, c-format msgid "Wrong format `%s' for netmask\n" msgstr "Fel format \"%s\" för nätmask: %s\n" -#: src/util/strings.c:1841 +#: src/util/strings.c:1842 #, fuzzy, c-format msgid "Wrong format `%s' for network\n" msgstr "Fel format \"%s\" för nätverk: %s\n" @@ -9225,12 +9255,16 @@ msgstr "# byte mottagna via UDP" msgid "Setup tunnels via VPN." msgstr "" -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:420 -#: src/zonemaster/gnunet-service-zonemaster.c:849 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 #, fuzzy msgid "Failed to connect to the namestore!\n" msgstr "Misslyckades att ansluta till gnunetd.\n" +#, fuzzy, c-format +#~ msgid "Unable to parse PKEY record `%s'\n" +#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + #~ msgid "b" #~ msgstr "b" diff --git a/po/vi.po b/po/vi.po index 7f142eea6..bf39ee228 100644 --- 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: 2020-10-13 16:12+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2008-09-10 22:05+0930\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: LocFactoryEditor 1.7b3\n" -#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1303 +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 #, c-format msgid "Ego `%s' not known to identity service\n" msgstr "" @@ -30,8 +30,8 @@ msgid "Issuer public key `%s' is not well-formed\n" msgstr "Đối số không hợp lệ cho « %s ».\n" #: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 -#: src/namestore/gnunet-namestore-fcfsd.c:1154 #: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 #, fuzzy, c-format msgid "Failed to connect to namestore\n" msgstr "Không kết nối được đến trình nền gnunetd." @@ -509,15 +509,82 @@ msgstr "" msgid "Initiating shutdown as requested by client.\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:896 +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 +#, c-format +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3011 +#, c-format +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3063 +#, c-format +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997 +msgid "solver to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 +msgid "experiment to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3564 #, fuzzy -msgid "Stop logging\n" +msgid "print logging" msgstr "Theo dõi" -#: src/ats-tests/ats-testing-log.c:952 +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:326 +#, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:336 +#, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:382 +#, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:474 #, fuzzy, c-format -msgid "Start logging `%s'\n" -msgstr "Đang bắt đầu tài về « %s »\n" +msgid "Failed to initialize solver `%s'!\n" +msgstr "Không thể sơ khởi SQLite: %s.\n" + +#: src/ats/plugin_ats_proportional.c:1142 +#, fuzzy, c-format +msgid "Invalid %s configuration %f \n" +msgstr "Không thể lưu tập tin cấu hình « %s »:" + +#: src/ats/plugin_ats_proportional.c:1165 +#, fuzzy, c-format +msgid "Invalid %s configuration %f\n" +msgstr "Không thể lưu tập tin cấu hình « %s »:" #: src/ats-tests/ats-testing.c:420 #, c-format @@ -529,6 +596,16 @@ msgstr "" msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "Lỗi kết nối đến gnunetd.\n" +#: src/ats-tests/ats-testing-log.c:896 +#, fuzzy +msgid "Stop logging\n" +msgstr "Theo dõi" + +#: src/ats-tests/ats-testing-log.c:952 +#, fuzzy, c-format +msgid "Start logging `%s'\n" +msgstr "Đang bắt đầu tài về « %s »\n" + #: src/ats-tests/gnunet-ats-sim.c:92 #, c-format msgid "" @@ -536,16 +613,6 @@ msgid "" "= %u KiB/s\n" msgstr "" -#: src/ats-tests/gnunet-solver-eval.c:997 src/ats/gnunet-ats-solver-eval.c:3552 -msgid "solver to use" -msgstr "" - -#: src/ats-tests/gnunet-solver-eval.c:1003 -#: src/ats-tests/gnunet-solver-eval.c:1008 -#: src/ats/gnunet-ats-solver-eval.c:3557 -msgid "experiment to use" -msgstr "" - #: src/ats-tool/gnunet-ats.c:299 #, c-format msgid "%u address resolutions had a timeout\n" @@ -668,73 +735,6 @@ msgstr "" msgid "Print information about ATS state" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 -#, c-format -msgid "" -"Could not load quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3011 -#, c-format -msgid "" -"No outbound quota configured for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3063 -#, c-format -msgid "" -"No outbound quota configure for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3564 -#, fuzzy -msgid "print logging" -msgstr "Theo dõi" - -#: src/ats/gnunet-ats-solver-eval.c:3569 -msgid "save logging to disk" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3574 -msgid "disable normalization" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:326 -#, c-format -msgid "" -"Could not load %s quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:336 -#, c-format -msgid "%s quota configured for network `%s' is %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:382 -#, c-format -msgid "" -"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:474 -#, fuzzy, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "Không thể sơ khởi SQLite: %s.\n" - -#: src/ats/plugin_ats_proportional.c:1142 -#, fuzzy, c-format -msgid "Invalid %s configuration %f \n" -msgstr "Không thể lưu tập tin cấu hình « %s »:" - -#: src/ats/plugin_ats_proportional.c:1165 -#, fuzzy, c-format -msgid "Invalid %s configuration %f\n" -msgstr "Không thể lưu tập tin cấu hình « %s »:" - #: src/auction/gnunet-auction-create.c:163 msgid "description of the item to be sold" msgstr "" @@ -773,7 +773,7 @@ msgstr "" #: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 #: src/conversation/gnunet-conversation-test.c:256 -#: src/revocation/gnunet-revocation.c:552 src/template/gnunet-template.c:75 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 msgid "help text" msgstr "" @@ -874,28 +874,6 @@ msgstr "" msgid "Connection to conversation service lost, trying to reconnect\n" msgstr "" -#: src/conversation/gnunet-conversation-test.c:120 -#, c-format -msgid "" -"\n" -"End of transmission. Have a GNU day.\n" -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:146 -#, c-format -msgid "" -"\n" -"We are now playing your recording back. If you can hear it, your audio " -"settings are working..." -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:218 -#, c-format -msgid "" -"We will now be recording you for %s. After that time, the recording will be " -"played back to you..." -msgstr "" - #: src/conversation/gnunet-conversation.c:264 #, c-format msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" @@ -1155,8 +1133,30 @@ msgstr "" msgid "Enables having a conversation with other GNUnet users." msgstr "" -#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#: src/conversation/gnunet-conversation-test.c:120 +#, c-format +msgid "" +"\n" +"End of transmission. Have a GNU day.\n" +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:146 +#, c-format +msgid "" +"\n" +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:218 +#, c-format +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" + #: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 #, c-format msgid "Read error from STDIN: %d %s\n" msgstr "" @@ -1286,7 +1286,7 @@ msgstr "SMTP: « %s » bị lỗi: %s\n" msgid "Failed to allocate %u bytes for second packet\n" msgstr "Lỗi tạo thư mục tạm thời." -#: src/conversation/gnunet-service-conversation.c:1287 +#: src/conversation/gnunet-service-conversation.c:1286 #, fuzzy, c-format msgid "Could not open line, port %s already in use!\n" msgstr "Không thể kết nối tới %s:%u: %s\n" @@ -2042,7 +2042,7 @@ msgid "" msgstr "" #: src/datastore/plugin_datastore_sqlite.c:1316 -#: src/namecache/plugin_namecache_sqlite.c:570 +#: src/namecache/plugin_namecache_sqlite.c:564 #: src/namestore/plugin_namestore_sqlite.c:765 #, fuzzy msgid "Sqlite database running\n" @@ -2115,6 +2115,54 @@ msgstr "" msgid "Prints all packets that go through the DHT." msgstr "" +#: src/dht/gnunet_dht_profiler.c:922 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" + +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +#, fuzzy +msgid "number of peers to start" +msgstr "số lần lặp lại" + +#: src/dht/gnunet_dht_profiler.c:961 +msgid "number of PUTs to perform per peer" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1023 +#, fuzzy +msgid "Measure quality and performance of the DHT service." +msgstr "Không thể truy cập đến dịch vụ" + #: src/dht/gnunet-dht-put.c:133 msgid "Must provide KEY and DATA for DHT put!\n" msgstr "" @@ -2386,61 +2434,14 @@ msgstr "" msgid "# DHT requests combined" msgstr "# các yêu cầu get (lấy) dht được nhận" -#: src/dht/gnunet_dht_profiler.c:922 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" - -#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 -#, fuzzy -msgid "number of peers to start" -msgstr "số lần lặp lại" - -#: src/dht/gnunet_dht_profiler.c:961 -msgid "number of PUTs to perform per peer" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 -#: src/testbed/gnunet-testbed-profiler.c:305 -msgid "name of the file with the login information for the testbed" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:973 -msgid "delay between rounds for collecting statistics (default: 30 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:979 -msgid "delay to start doing PUTs (default: 1 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:985 -msgid "delay to start doing GETs (default: 5 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:990 -msgid "replication degree for DHT PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:996 -msgid "chance that a peer is selected at random for PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1002 -msgid "timeout for DHT PUT and GET requests (default: 1 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1023 -#, fuzzy -msgid "Measure quality and performance of the DHT service." -msgstr "Không thể truy cập đến dịch vụ" - #: src/dht/plugin_block_dht.c:189 #, fuzzy, c-format msgid "Block not of type %u\n" msgstr "Không biết truyền tải nào kiểu %d.\n" #: src/dht/plugin_block_dht.c:198 -msgid "Size mismatch for block\n" +#, c-format +msgid "Size mismatch for block with type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:209 @@ -2890,8 +2891,8 @@ msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" #: src/fs/fs_download.c:1053 #, c-format msgid "" -"Internal error or bogus download URI (expected %u bytes at depth %u and " -"offset %llu/%llu, got %u bytes)" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" msgstr "" #: src/fs/fs_download.c:1075 @@ -3227,7 +3228,7 @@ msgid "" "You must specify one and only one directory name for automatic publication.\n" msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n" -#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:888 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "đặt CẤP mong muốn của tình trạng nặc danh của người gửi" @@ -3235,15 +3236,15 @@ msgstr "đặt CẤP mong muốn của tình trạng nặc danh của người g msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "tắt thêm giờ tạo vào siêu dữ liệu của tập tin đã tải lên" -#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:893 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "" -#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:938 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "xác định mức ưu tiên của nội dung" -#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:951 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "" @@ -3329,7 +3330,7 @@ msgstr "Gặp sự kiện bất thường: %d\n" msgid "You need to specify a URI argument.\n" msgstr "KHÔNG cho phép ghi rõ cả hai địa chỉ URI và tên tập tin.\n" -#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:707 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, fuzzy, c-format msgid "Failed to parse URI: %s\n" msgstr "Tập tin « %s » có URI: %s\n" @@ -3342,7 +3343,7 @@ msgstr "" msgid "Target filename must be specified.\n" msgstr "" -#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:861 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 #: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, fuzzy, c-format msgid "Could not initialize `%s' subsystem.\n" @@ -3385,6 +3386,15 @@ msgid "" "chk/...)" msgstr "" +#: src/fs/gnunet-fs.c:128 +msgid "print a list of all indexed files" +msgstr "" + +#: src/fs/gnunet-fs.c:141 +#, fuzzy +msgid "Special file-sharing operations" +msgstr "Tùy chọn chia sẻ tập tin" + #: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "" @@ -3401,15 +3411,6 @@ msgstr "" msgid "run a testbed to measure file-sharing performance" msgstr "" -#: src/fs/gnunet-fs.c:128 -msgid "print a list of all indexed files" -msgstr "" - -#: src/fs/gnunet-fs.c:141 -#, fuzzy -msgid "Special file-sharing operations" -msgstr "Tùy chọn chia sẻ tập tin" - #: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" @@ -3460,97 +3461,97 @@ msgstr "Đang cập nhật dữ liệu cho mô-đun « %s »\n" msgid "Keywords for file `%s' (%s)\n" msgstr "Từ khoá cho tập tin « %s »:\n" -#: src/fs/gnunet-publish.c:577 +#: src/fs/gnunet-publish.c:582 #, fuzzy msgid "Could not publish\n" msgstr "Không thể truy cập đến « %s »: %s\n" -#: src/fs/gnunet-publish.c:603 +#: src/fs/gnunet-publish.c:611 #, fuzzy msgid "Could not start publishing.\n" msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n" -#: src/fs/gnunet-publish.c:636 +#: src/fs/gnunet-publish.c:644 #, fuzzy, c-format msgid "Scanning directory `%s'.\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/fs/gnunet-publish.c:638 +#: src/fs/gnunet-publish.c:646 #, fuzzy, c-format msgid "Scanning file `%s'.\n" msgstr "Đang bắt đầu tài về « %s »\n" -#: src/fs/gnunet-publish.c:644 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "" -#: src/fs/gnunet-publish.c:650 +#: src/fs/gnunet-publish.c:658 msgid "Preprocessing complete.\n" msgstr "" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:664 #, fuzzy, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "Đang cập nhật dữ liệu cho mô-đun « %s »\n" -#: src/fs/gnunet-publish.c:662 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "" -#: src/fs/gnunet-publish.c:670 +#: src/fs/gnunet-publish.c:678 #, fuzzy msgid "Error scanning directory.\n" msgstr "=\tLỗi đọc thư mục.\n" -#: src/fs/gnunet-publish.c:697 +#: src/fs/gnunet-publish.c:705 #, fuzzy, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "Không gian tên « %s » có đánh giá %d.\n" -#: src/fs/gnunet-publish.c:729 +#: src/fs/gnunet-publish.c:737 #, fuzzy, c-format msgid "Failed to access `%s': %s\n" msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" -#: src/fs/gnunet-publish.c:746 +#: src/fs/gnunet-publish.c:754 msgid "" "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " "installed?\n" msgstr "" -#: src/fs/gnunet-publish.c:802 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "Không thể trích siêu dữ liệu ra một địa chỉ URI.\n" -#: src/fs/gnunet-publish.c:809 +#: src/fs/gnunet-publish.c:817 #, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n" -#: src/fs/gnunet-publish.c:815 +#: src/fs/gnunet-publish.c:823 #, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "KHÔNG cho phép ghi rõ cả hai địa chỉ URI và tên tập tin.\n" -#: src/fs/gnunet-publish.c:824 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "Tùy chọn « %s » cần thiết khi dùng tùy chọn « %s ».\n" -#: src/fs/gnunet-publish.c:836 src/fs/gnunet-publish.c:845 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 #: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "Tùy chọn « %s » không có nghĩa khi không có tùy chọn « %s ».\n" -#: src/fs/gnunet-publish.c:898 +#: src/fs/gnunet-publish.c:906 #, fuzzy msgid "enable adding the creation time to the metadata of the uploaded file" msgstr "tắt thêm giờ tạo vào siêu dữ liệu của tập tin đã tải lên" -#: src/fs/gnunet-publish.c:904 +#: src/fs/gnunet-publish.c:912 msgid "" "print list of extracted keywords that would be used, but do not perform " "upload" @@ -3558,7 +3559,7 @@ msgstr "" "in ra danh sách các từ khóa đã giải phóng cần sử dụng, nhưng không thực hiện " "tải lên" -#: src/fs/gnunet-publish.c:912 +#: src/fs/gnunet-publish.c:920 msgid "" "add an additional keyword for the top-level file or directory (this option " "can be specified multiple times)" @@ -3566,11 +3567,11 @@ msgstr "" "thêm một từ khoá bổ sung cho tập tin hoặc thư mục ở cấp đầu (có thể chỉ ra " "tùy chọn này nhiều lần)" -#: src/fs/gnunet-publish.c:919 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "đặt siêu dữ liệu cho KIỂU đưa ra thành GIÁ_TRỊ chỉ ra" -#: src/fs/gnunet-publish.c:924 +#: src/fs/gnunet-publish.c:932 msgid "" "do not index, perform full insertion (stores entire file in encrypted form " "in GNUnet database)" @@ -3578,7 +3579,7 @@ msgstr "" "không đánh chỉ mục, thực hiện việc chèn đầy đủ (chứa toàn bộ tập tin ở dạng " "mã hóa trong cơ sở dữ liệu GNUnet)" -#: src/fs/gnunet-publish.c:931 +#: src/fs/gnunet-publish.c:939 msgid "" "specify ID of an updated version to be published in the future (for " "namespace insertions only)" @@ -3586,12 +3587,12 @@ msgstr "" "chỉ ra mã số của một phiên bản đã cập nhật để công bố trong tương lai (chỉ " "cho sự chèn không gian tên)" -#: src/fs/gnunet-publish.c:944 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" msgstr "" "công bố các tập tin dưới biệt hiệu TÊN (đặt tập tin vào không gian tên)" -#: src/fs/gnunet-publish.c:956 +#: src/fs/gnunet-publish.c:964 #, fuzzy msgid "" "only simulate the process but do not do any actual publishing (useful to " @@ -3599,13 +3600,13 @@ msgid "" msgstr "" "chỉ mô phỏng tiến trình, không thật công bố (có ích để tính địa chỉ URI)" -#: src/fs/gnunet-publish.c:963 +#: src/fs/gnunet-publish.c:971 msgid "" "set the ID of this version of the publication (for namespace insertions only)" msgstr "" "đặt mã số của phiên bản này của sự công bố (chỉ cho chèn không gian tên)" -#: src/fs/gnunet-publish.c:971 +#: src/fs/gnunet-publish.c:979 msgid "" "URI to be published (can be used instead of passing a file to add keywords " "to the file with the respective URI)" @@ -3613,7 +3614,7 @@ msgstr "" "Địa chỉ URI cần công bố (có thể được dùng thay vào gửi một tập tin để thêm " "từ khoá vào tập tin có địa chỉ URI tương ứng)" -#: src/fs/gnunet-publish.c:989 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "" @@ -4039,7 +4040,7 @@ msgstr "Không thể truy cập đến thông tin về không gian tên.\n" msgid "Unindex a file that was previously indexed with gnunet-publish." msgstr "" -#: src/gns/gns_tld_api.c:292 +#: src/gns/gns_tld_api.c:293 msgid "Expected a base32-encoded public zone key\n" msgstr "" @@ -4120,7 +4121,53 @@ msgstr "" msgid "look for GNS2DNS records instead of ANY" msgstr "" -#: src/gns/gnunet-gns-import.c:486 +#: src/gns/gnunet-gns.c:257 +#, fuzzy, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "« %s » không sẵn sàng.\n" + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 +#, fuzzy, c-format +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" + +#: src/gns/gnunet-gns.c:305 +#, c-format +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" + +#: src/gns/gnunet-gns.c:340 +msgid "Lookup a record for the given name" +msgstr "" + +#: src/gns/gnunet-gns.c:346 +#, fuzzy +msgid "Specify the type of the record to lookup" +msgstr "xác định mức ưu tiên của nội dung" + +#: src/gns/gnunet-gns.c:352 +#, fuzzy +msgid "Specify a timeout for the lookup" +msgstr "xác định mức ưu tiên của nội dung" + +#: src/gns/gnunet-gns.c:356 +msgid "No unneeded output" +msgstr "" + +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" + +#: src/gns/gnunet-gns.c:375 +#, fuzzy +msgid "GNUnet GNS resolver tool" +msgstr "Bản ghi lỗi GNUnet" + +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "" @@ -4240,52 +4287,6 @@ msgstr "" msgid "GNUnet GNS proxy" msgstr "" -#: src/gns/gnunet-gns.c:257 -#, fuzzy, c-format -msgid "`%s' is not a valid DNS domain name\n" -msgstr "« %s » không sẵn sàng.\n" - -#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 -#, fuzzy, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" - -#: src/gns/gnunet-gns.c:281 -msgid "Cannot resolve using GNS: GNUnet peer not running\n" -msgstr "" - -#: src/gns/gnunet-gns.c:305 -#, c-format -msgid "Invalid typename specified, assuming `ANY'\n" -msgstr "" - -#: src/gns/gnunet-gns.c:340 -msgid "Lookup a record for the given name" -msgstr "" - -#: src/gns/gnunet-gns.c:346 -#, fuzzy -msgid "Specify the type of the record to lookup" -msgstr "xác định mức ưu tiên của nội dung" - -#: src/gns/gnunet-gns.c:352 -#, fuzzy -msgid "Specify a timeout for the lookup" -msgstr "xác định mức ưu tiên của nội dung" - -#: src/gns/gnunet-gns.c:356 -msgid "No unneeded output" -msgstr "" - -#: src/gns/gnunet-gns.c:361 -msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" -msgstr "" - -#: src/gns/gnunet-gns.c:375 -#, fuzzy -msgid "GNUnet GNS resolver tool" -msgstr "Bản ghi lỗi GNUnet" - #: src/gns/gnunet-service-gns.c:505 #, fuzzy msgid "Properly base32-encoded public key required" @@ -4297,8 +4298,8 @@ msgid "Failed to connect to the namecache!\n" msgstr "Không kết nối được đến trình nền gnunetd." #: src/gns/gnunet-service-gns.c:560 -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:444 -#: src/zonemaster/gnunet-service-zonemaster.c:887 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 #, fuzzy msgid "Could not connect to DHT!\n" msgstr "Không thể kết nối tới %s:%u: %s\n" @@ -4343,66 +4344,70 @@ msgstr "" msgid "VPN returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1909 +#: src/gns/gnunet-service-gns_resolver.c:1910 #, c-format msgid "Name `%s' cannot be converted to IDNA." msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1922 +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1965 +#: src/gns/gnunet-service-gns_resolver.c:1966 #, fuzzy, c-format msgid "GNS lookup failed (zero records found for `%s')\n" msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" -#: src/gns/gnunet-service-gns_resolver.c:2385 +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2408 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, fuzzy, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" -#: src/gns/gnunet-service-gns_resolver.c:2576 +#: src/gns/gnunet-service-gns_resolver.c:2581 #, c-format msgid "GNS namecache returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2716 +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:167 +#: src/gns/plugin_gnsrecord_gns.c:174 #, fuzzy, c-format -msgid "Unable to parse PKEY record `%s'\n" +msgid "Unable to parse zone key record `%s'\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/gns/plugin_gnsrecord_gns.c:197 +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" +msgstr "" + +#: src/gns/plugin_gnsrecord_gns.c:213 #, fuzzy, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/gns/plugin_gnsrecord_gns.c:213 +#: src/gns/plugin_gnsrecord_gns.c:229 #, fuzzy, c-format msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" -#: src/gns/plugin_gnsrecord_gns.c:237 +#: src/gns/plugin_gnsrecord_gns.c:253 #, fuzzy, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/gns/plugin_gnsrecord_gns.c:269 +#: src/gns/plugin_gnsrecord_gns.c:285 #, fuzzy, c-format msgid "Unable to parse BOX record string `%s'\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/gns/plugin_rest_gns.c:447 +#: src/gns/plugin_rest_gns.c:448 #, fuzzy msgid "Gns REST API initialized\n" msgstr "Lỗi sơ khởi lõi.\n" @@ -4719,7 +4724,7 @@ msgid "# hostlist URIs written to file" msgstr "# các byte danh sách máy được trả về" #: src/hostlist/gnunet-daemon-hostlist_client.c:1657 -#: src/transport/plugin_transport_http_client.c:2301 +#: src/transport/plugin_transport_http_client.c:2300 #, c-format msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" msgstr "" @@ -4854,58 +4859,62 @@ msgstr "« %s » không sẵn sàng.\n" msgid "Could not start hostlist HTTP server on port %u\n" msgstr "Cổng cho trình phục vụ HTTP danh sách máy chủ thống nhất" -#: src/identity/gnunet-identity.c:209 +#: src/identity/gnunet-identity.c:214 #, fuzzy, c-format msgid "Failed to create ego: %s\n" msgstr "Không thể tạo miền tên.\n" -#: src/identity/gnunet-identity.c:250 +#: src/identity/gnunet-identity.c:255 #, fuzzy, c-format msgid "Failed to set default ego: %s\n" msgstr "Không thể tạo miền tên.\n" -#: src/identity/gnunet-identity.c:446 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "" -#: src/identity/gnunet-identity.c:451 +#: src/identity/gnunet-identity.c:467 msgid "delete ego NAME " msgstr "" -#: src/identity/gnunet-identity.c:457 +#: src/identity/gnunet-identity.c:473 msgid "" "set the private key for the identity to PRIVATE_KEY (use together with -C)" msgstr "" -#: src/identity/gnunet-identity.c:461 +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + +#: src/identity/gnunet-identity.c:482 msgid "display all egos" msgstr "" -#: src/identity/gnunet-identity.c:465 +#: src/identity/gnunet-identity.c:486 msgid "reduce output" msgstr "" -#: src/identity/gnunet-identity.c:472 +#: src/identity/gnunet-identity.c:493 msgid "" "set default identity to NAME for a subsystem SUBSYSTEM (use together with -" "s) or restrict results to NAME (use together with -d)" msgstr "" -#: src/identity/gnunet-identity.c:476 +#: src/identity/gnunet-identity.c:497 msgid "run in monitor mode egos" msgstr "" -#: src/identity/gnunet-identity.c:480 +#: src/identity/gnunet-identity.c:501 #, fuzzy msgid "display private keys as well" msgstr "hiển thị giá trị tổng kiểm của tập tin" -#: src/identity/gnunet-identity.c:487 +#: src/identity/gnunet-identity.c:508 msgid "" "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" msgstr "" -#: src/identity/gnunet-identity.c:502 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "" @@ -4941,27 +4950,27 @@ msgstr "" msgid "no matching ego found" msgstr "" -#: src/identity/gnunet-service-identity.c:1072 +#: src/identity/gnunet-service-identity.c:1133 #, fuzzy, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/identity/gnunet-service-identity.c:1130 +#: src/identity/gnunet-service-identity.c:1191 #, fuzzy, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" msgstr "Không thể lưu tập tin cấu hình « %s »:" -#: src/identity/gnunet-service-identity.c:1139 +#: src/identity/gnunet-service-identity.c:1200 #, fuzzy, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/identity/plugin_rest_identity.c:1384 +#: src/identity/plugin_rest_identity.c:1385 #, fuzzy msgid "Identity REST API initialized\n" msgstr "Lỗi sơ khởi lõi.\n" -#: src/json/json.c:133 +#: src/json/json.c:139 #, fuzzy, c-format msgid "Failed to parse JSON in option `%s': %s (%s)\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" @@ -5006,7 +5015,7 @@ msgstr "Đối số không hợp lệ cho « %s ».\n" msgid "You must specify a name\n" msgstr "Phải ghi rõ tên hiệu\n" -#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1640 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "" @@ -5015,22 +5024,22 @@ msgstr "" msgid "specifies the public key of the zone to look in" msgstr "xác định mức ưu tiên của nội dung" -#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1701 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 #, fuzzy msgid "GNUnet zone manipulation tool" msgstr "Cấu hình GNUnet" -#: src/namecache/namecache_api.c:293 +#: src/namecache/namecache_api.c:285 msgid "Namecache failed to cache block" msgstr "" -#: src/namecache/namecache_api.c:381 +#: src/namecache/namecache_api.c:373 #, fuzzy msgid "Error communicating with namecache service" msgstr "Cổng để liên lạc với giao diện người dùng GNUnet" #: src/namecache/plugin_namecache_flat.c:118 -#: src/namecache/plugin_namecache_flat.c:256 +#: src/namecache/plugin_namecache_flat.c:253 #: src/namestore/plugin_namestore_flat.c:176 #: src/namestore/plugin_namestore_flat.c:424 #: src/peerstore/plugin_peerstore_flat.c:380 @@ -5052,7 +5061,7 @@ msgstr "Không thể tạo miền tên.\n" msgid "Unable to read file: %s.\n" msgstr "Không thể tạo miền tên.\n" -#: src/namecache/plugin_namecache_flat.c:410 +#: src/namecache/plugin_namecache_flat.c:404 #, fuzzy msgid "flat plugin running\n" msgstr "kho dữ liệu sqlite" @@ -5065,70 +5074,6 @@ msgstr "kho dữ liệu sqlite" msgid "Failed to setup database at `%s'\n" msgstr "Lỗi chạy %s: %s %d\n" -#: src/namestore/gnunet-namestore-fcfsd.c:552 -#, fuzzy, c-format -msgid "Unsupported form value `%s'\n" -msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:579 -#, fuzzy, c-format -msgid "Failed to create record for domain `%s': %s\n" -msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:600 -msgid "Error when mapping zone to name\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:632 -#, c-format -msgid "Found existing name `%s' for the given key\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:694 -#, c-format -msgid "Found %u existing records for domain `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:784 -#, fuzzy, c-format -msgid "Failed to create page for `%s'\n" -msgstr "Không thể tạo miền tên.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:803 -#, fuzzy, c-format -msgid "Failed to setup post processor for `%s'\n" -msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:840 -msgid "Domain name must not contain `.'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:849 -msgid "Domain name must not contain `+'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1084 -msgid "No ego configured for `fcfsd` subsystem\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1115 -#, fuzzy -msgid "Failed to start HTTP server\n" -msgstr "Lỗi bắt đầu thu thập.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1163 -#, fuzzy -msgid "Failed to connect to identity\n" -msgstr "Lỗi kết nối đến gnunetd.\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1190 -msgid "name of the zone that is to be managed by FCFSD" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1210 -msgid "GNU Name System First Come First Serve name registration service" -msgstr "" - #: src/namestore/gnunet-namestore.c:334 #, fuzzy, c-format msgid "Adding record failed: %s\n" @@ -5144,11 +5089,17 @@ msgstr "Gặp lỗi khi tải lên tập tin: %s\n" msgid "Deleting record failed%s%s\n" msgstr "Gặp lỗi khi tải lên tập tin: %s\n" -#: src/namestore/gnunet-namestore.c:656 src/namestore/gnunet-namestore.c:667 +#: src/namestore/gnunet-namestore.c:656 #, c-format msgid "A %s record exists already under `%s', no other records can be added.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:680 #, c-format msgid "" @@ -5156,11 +5107,16 @@ msgid "" "zone.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:696 src/namestore/gnunet-namestore.c:710 +#: src/namestore/gnunet-namestore.c:696 #, c-format msgid "Records already exist under `%s', cannot add `%s' record.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:726 #, c-format msgid "" @@ -5191,7 +5147,7 @@ msgstr "chưa đưa ra tên" #: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 #: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 #: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 -#: src/namestore/gnunet-namestore.c:1229 +#: src/namestore/gnunet-namestore.c:1228 #, fuzzy, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" @@ -5207,7 +5163,7 @@ msgstr "Dữ liệu nhập không hợp lệ.\n" #: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 #: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 -#: src/namestore/gnunet-namestore.c:1231 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "" @@ -5226,7 +5182,7 @@ msgstr "" msgid "Value `%s' invalid for record type `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1238 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, fuzzy, c-format msgid "Invalid time format `%s'\n" msgstr "Địa chỉ IP định dạng sai: %s\n" @@ -5235,23 +5191,23 @@ msgstr "Địa chỉ IP định dạng sai: %s\n" msgid "del" msgstr "" -#: src/namestore/gnunet-namestore.c:1198 +#: src/namestore/gnunet-namestore.c:1197 #, fuzzy, c-format 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:1221 +#: src/namestore/gnunet-namestore.c:1220 #: src/peerinfo-tool/gnunet-peerinfo.c:736 #, fuzzy, c-format msgid "Invalid URI `%s'\n" msgstr "Dữ liệu nhập không hợp lệ.\n" -#: src/namestore/gnunet-namestore.c:1291 +#: src/namestore/gnunet-namestore.c:1290 #, c-format msgid "Label `%s' contains `.' which is not allowed\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1341 +#: src/namestore/gnunet-namestore.c:1340 #, c-format msgid "" "No default identity configured for `namestore' subsystem\n" @@ -5259,105 +5215,174 @@ msgid "" "Run gnunet-identity -d to get a list of choices for $NAME\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1406 +#: src/namestore/gnunet-namestore.c:1405 #, c-format msgid "Superfluous command line arguments (starting with `%s') ignored\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1435 +#: src/namestore/gnunet-namestore.c:1434 #, fuzzy, c-format msgid "Cannot connect to identity service\n" msgstr "Không thể kết nối tới %s:%u: %s\n" -#: src/namestore/gnunet-namestore.c:1482 +#: src/namestore/gnunet-namestore.c:1481 msgid "Empty record line argument is not allowed.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1494 +#: src/namestore/gnunet-namestore.c:1493 #, c-format msgid "Invalid expiration time `%s' (must be without unit)\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1506 src/namestore/gnunet-namestore.c:1522 -#: src/namestore/gnunet-namestore.c:1539 +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 #, fuzzy, c-format msgid "Missing entries in record line `%s'.\n" msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n" -#: src/namestore/gnunet-namestore.c:1514 +#: src/namestore/gnunet-namestore.c:1513 #, fuzzy, c-format msgid "Unknown record type `%s'\n" msgstr "Không rõ câu lệnh « %s ».\n" -#: src/namestore/gnunet-namestore.c:1552 +#: src/namestore/gnunet-namestore.c:1551 #, fuzzy, c-format msgid "Invalid record data for type %s: `%s'.\n" msgstr "Địa chỉ IP định dạng sai: %s\n" -#: src/namestore/gnunet-namestore.c:1609 +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "" -#: src/namestore/gnunet-namestore.c:1612 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "" -#: src/namestore/gnunet-namestore.c:1616 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "" -#: src/namestore/gnunet-namestore.c:1623 +#: src/namestore/gnunet-namestore.c:1622 msgid "" "expiration time for record to use (for adding only), \"never\" is possible" msgstr "" -#: src/namestore/gnunet-namestore.c:1629 +#: src/namestore/gnunet-namestore.c:1628 #, fuzzy msgid "set the desired nick name for the zone" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/namestore/gnunet-namestore.c:1634 +#: src/namestore/gnunet-namestore.c:1633 #, fuzzy msgid "monitor changes in the namestore" msgstr "Không kết nối được đến trình nền gnunetd." -#: src/namestore/gnunet-namestore.c:1646 +#: src/namestore/gnunet-namestore.c:1645 #, fuzzy msgid "determine our name for the given PKEY" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/namestore/gnunet-namestore.c:1653 +#: src/namestore/gnunet-namestore.c:1652 msgid "" "set record set to values given by (possibly multiple) RECORDLINES; can be " "specified multiple times" msgstr "" -#: src/namestore/gnunet-namestore.c:1659 +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "" -#: src/namestore/gnunet-namestore.c:1664 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1670 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "" -#: src/namestore/gnunet-namestore.c:1674 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "" -#: src/namestore/gnunet-namestore.c:1680 +#: src/namestore/gnunet-namestore.c:1679 msgid "" "create shadow record (only valid if all other records of the same type have " "expired" msgstr "" -#: src/namestore/gnunet-namestore.c:1686 +#: src/namestore/gnunet-namestore.c:1685 msgid "name of the ego controlling the zone" msgstr "" +#: src/namestore/gnunet-namestore-fcfsd.c:552 +#, fuzzy, c-format +msgid "Unsupported form value `%s'\n" +msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:579 +#, fuzzy, c-format +msgid "Failed to create record for domain `%s': %s\n" +msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 +#, c-format +msgid "Found existing name `%s' for the given key\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "=\tLỗi đọc thư mục.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:707 +#, c-format +msgid "Found %u existing records for domain `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:796 +#, fuzzy, c-format +msgid "Failed to create page for `%s'\n" +msgstr "Không thể tạo miền tên.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:815 +#, fuzzy, c-format +msgid "Failed to setup post processor for `%s'\n" +msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:850 +msgid "Domain name must not contain `.'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:859 +msgid "Domain name must not contain `+'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1094 +msgid "No ego configured for `fcfsd` subsystem\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1125 +#, fuzzy +msgid "Failed to start HTTP server\n" +msgstr "Lỗi bắt đầu thu thập.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1173 +#, fuzzy +msgid "Failed to connect to identity\n" +msgstr "Lỗi kết nối đến gnunetd.\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 +msgid "GNU Name System First Come First Serve name registration service" +msgstr "" + #: src/namestore/gnunet-service-namestore.c:866 #, fuzzy, c-format msgid "Failed to replicate block in namecache: %s\n" @@ -5385,7 +5410,7 @@ msgstr "" msgid "Namestore database file `%s' malformed\n" msgstr "" -#: src/namestore/plugin_namestore_flat.c:789 +#: src/namestore/plugin_namestore_flat.c:792 #, fuzzy msgid "Flat file database running\n" msgstr "kho dữ liệu sqlite" @@ -5677,6 +5702,11 @@ msgstr "" msgid "`upnpc' command not found\n" msgstr "" +#: src/nse/gnunet-nse.c:124 +#, fuzzy +msgid "Show network size estimates from NSE service." +msgstr "# các yêu cầu get (lấy) dht được nhận" + #: src/nse/gnunet-nse-profiler.c:857 #, fuzzy msgid "limit to the number of connections to NSE services, 0 for none" @@ -5694,25 +5724,79 @@ msgstr "" msgid "Number of peers to run in each round, separated by commas" msgstr "" -#: src/nse/gnunet-nse-profiler.c:900 -msgid "delay between rounds" +#: src/nse/gnunet-nse-profiler.c:900 +msgid "delay between rounds" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:912 +#, fuzzy +msgid "Measure quality and performance of the NSE service." +msgstr "Không thể truy cập đến dịch vụ" + +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 +#, fuzzy +msgid "Value is too large.\n" +msgstr "Giá trị không nằm trong phạm vi được phép." + +#: src/peerinfo/gnunet-service-peerinfo.c:175 +#, fuzzy, c-format +msgid "Removing expired address of transport `%s'\n" +msgstr "Đã nạp truyền tải « %s »\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:306 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s': %s\n" +msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s'\n" +msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:426 +msgid "# peers known" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:468 +#, c-format +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" +msgstr "" +"Tập tin « %s » trong thư mục « %s » không tùy theo quy ước đặt tên. Bị gỡ " +"bỏ.\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:624 +#, fuzzy, c-format +msgid "Scanning directory `%s'\n" +msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:631 +#, c-format +msgid "Still no peers found in `%s'!\n" +msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:1024 +#, fuzzy, c-format +msgid "Cleaning up directory `%s'\n" +msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:1319 +#, c-format +msgid "Importing HELLOs from `%s'\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:1332 +msgid "Skipping import of included HELLOs\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:912 -#, fuzzy -msgid "Measure quality and performance of the NSE service." -msgstr "Không thể truy cập đến dịch vụ" - -#: src/nse/gnunet-nse.c:124 -#, fuzzy -msgid "Show network size estimates from NSE service." -msgstr "# các yêu cầu get (lấy) dht được nhận" - -#: src/nse/gnunet-service-nse.c:1443 -#: src/revocation/gnunet-service-revocation.c:834 src/util/gnunet-scrypt.c:257 +#: src/peerinfo/peerinfo_api.c:217 #, fuzzy -msgid "Value is too large.\n" -msgstr "Giá trị không nằm trong phạm vi được phép." +msgid "Failed to receive response from `PEERINFO' service." +msgstr "" +"\n" +"Không nhận được đáp ứng từ gnunetd.\n" #: src/peerinfo-tool/gnunet-peerinfo.c:237 #, fuzzy, c-format @@ -5811,65 +5895,6 @@ msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n" msgid "Peerinfo REST API initialized\n" msgstr "Lỗi sơ khởi lõi.\n" -#: src/peerinfo/gnunet-service-peerinfo.c:175 -#, fuzzy, c-format -msgid "Removing expired address of transport `%s'\n" -msgstr "Đã nạp truyền tải « %s »\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:306 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s': %s\n" -msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:323 -#: src/peerinfo/gnunet-service-peerinfo.c:348 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s'\n" -msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:426 -msgid "# peers known" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:468 -#, c-format -msgid "" -"File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "" -"Tập tin « %s » trong thư mục « %s » không tùy theo quy ước đặt tên. Bị gỡ " -"bỏ.\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:624 -#, fuzzy, c-format -msgid "Scanning directory `%s'\n" -msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:631 -#, c-format -msgid "Still no peers found in `%s'!\n" -msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1024 -#, fuzzy, c-format -msgid "Cleaning up directory `%s'\n" -msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1319 -#, c-format -msgid "Importing HELLOs from `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1332 -msgid "Skipping import of included HELLOs\n" -msgstr "" - -#: src/peerinfo/peerinfo_api.c:217 -#, fuzzy -msgid "Failed to receive response from `PEERINFO' service." -msgstr "" -"\n" -"Không nhận được đáp ứng từ gnunetd.\n" - #: src/peerstore/gnunet-peerstore.c:92 msgid "peerstore" msgstr "" @@ -6064,7 +6089,7 @@ msgstr "" msgid "re:claimID command line tool" msgstr "" -#: src/reclaim/plugin_rest_openid_connect.c:2618 +#: src/reclaim/plugin_rest_openid_connect.c:2613 #, fuzzy msgid "OpenID Connect REST API initialized\n" msgstr "Lỗi sơ khởi lõi.\n" @@ -6226,119 +6251,136 @@ msgstr "" msgid "Internal error, key revocation might have failed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:251 +#: src/revocation/gnunet-revocation.c:252 msgid "Cancelling calculation.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:296 +#: src/revocation/gnunet-revocation.c:299 #, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:335 +#: src/revocation/gnunet-revocation.c:339 #, fuzzy, c-format msgid "Ego `%s' not found.\n" msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" -#: src/revocation/gnunet-revocation.c:349 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:359 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "" -#: src/revocation/gnunet-revocation.c:371 +#: src/revocation/gnunet-revocation.c:378 msgid "Continuing calculation where left off...\n" msgstr "" -#: src/revocation/gnunet-revocation.c:378 +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "" -#: src/revocation/gnunet-revocation.c:416 +#: src/revocation/gnunet-revocation.c:423 #, fuzzy, c-format msgid "Public key `%s' malformed\n" msgstr "Đối số không hợp lệ cho « %s ».\n" -#: src/revocation/gnunet-revocation.c:426 +#: src/revocation/gnunet-revocation.c:433 msgid "" "Testing and revoking at the same time is not allowed, only executing test.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:456 +#: src/revocation/gnunet-revocation.c:463 #, fuzzy msgid "No filename to store revocation certificate given.\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/revocation/gnunet-revocation.c:471 +#: src/revocation/gnunet-revocation.c:480 #, fuzzy, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/revocation/gnunet-revocation.c:493 +#: src/revocation/gnunet-revocation.c:488 +#, fuzzy, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" + +#: src/revocation/gnunet-revocation.c:510 #, fuzzy msgid "No action specified. Nothing to do.\n" msgstr "Chưa xác định giao diện nên dùng mặc định.\n" -#: src/revocation/gnunet-revocation.c:512 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "" -#: src/revocation/gnunet-revocation.c:520 +#: src/revocation/gnunet-revocation.c:537 msgid "" "revoke the private key associated for the the private key associated with " "the ego NAME " msgstr "" -#: src/revocation/gnunet-revocation.c:527 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "" -#: src/revocation/gnunet-revocation.c:534 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "" -#: src/revocation/gnunet-revocation.c:540 +#: src/revocation/gnunet-revocation.c:557 #, fuzzy msgid "number of epochs to calculate for" msgstr "số lần lặp lại" -#: src/revocation/gnunet-service-revocation.c:454 +#: src/revocation/gnunet-service-revocation.c:494 #, fuzzy msgid "# unsupported revocations received via set union" msgstr "# các yêu cầu danh sách máy được nhận" -#: src/revocation/gnunet-service-revocation.c:464 +#: src/revocation/gnunet-service-revocation.c:504 #, fuzzy msgid "# revocation messages received via set union" msgstr "# các thông báo PONG đã mật mã được nhận" -#: src/revocation/gnunet-service-revocation.c:469 +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:473 +#: src/revocation/gnunet-service-revocation.c:513 #, fuzzy msgid "# revocation set unions failed" msgstr "# các khoá phiên chạy được chấp nhận" -#: src/revocation/gnunet-service-revocation.c:481 +#: src/revocation/gnunet-service-revocation.c:521 #, fuzzy msgid "# revocation set unions completed" msgstr "# các sự truyền PONG bị lỗi" -#: src/revocation/gnunet-service-revocation.c:519 +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:871 +#: src/revocation/gnunet-service-revocation.c:912 #, fuzzy msgid "Could not open revocation database file!" msgstr "« %s »: Không thể kết nối.\n" +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" + +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" + +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" + #: src/rps/gnunet-rps-profiler.c:3200 msgid "duration of the profiling" msgstr "" @@ -6358,18 +6400,6 @@ msgstr "số lần lặp lại" msgid "Measure quality and performance of the RPS service." msgstr "Không thể truy cập đến dịch vụ" -#: src/rps/gnunet-rps.c:270 -msgid "Seed a PeerID" -msgstr "" - -#: src/rps/gnunet-rps.c:275 -msgid "Get updates of view (0 for infinite updates)" -msgstr "" - -#: src/rps/gnunet-rps.c:279 -msgid "Get peers from biased stream" -msgstr "" - #: src/scalarproduct/gnunet-scalarproduct.c:229 #, fuzzy msgid "You must specify at least one message ID to check!\n" @@ -6425,10 +6455,10 @@ msgstr "" msgid "Calculate the Vectorproduct with a GNUnet peer." msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #, fuzzy msgid "Connect to CADET failed\n" msgstr " Không kết nối được (lỗi ?)\n" @@ -6454,7 +6484,7 @@ msgid "also profile decryption" msgstr "" #: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 -#: src/setu/gnunet-service-setu.c:3635 +#: src/setu/gnunet-service-setu.c:3633 #, fuzzy msgid "Could not connect to CADET service\n" msgstr "Không thể kết nối tới %s:%u: %s\n" @@ -6783,6 +6813,16 @@ msgstr "« %s » đang tắt.\n" msgid "%.s Unknown result code." msgstr "" +#: src/testbed/gnunet_testbed_mpi_spawn.c:119 +#, fuzzy +msgid "Waiting for child to exit.\n" +msgstr "Đang đợi các đồng đẳng kết nối" + +#: src/testbed/gnunet_testbed_mpi_spawn.c:242 +#, fuzzy, c-format +msgid "Spawning process `%s'\n" +msgstr "Đang bắt đầu tài về « %s »\n" + #: src/testbed/gnunet-testbed-profiler.c:290 msgid "tolerate COUNT number of continious timeout failures" msgstr "" @@ -6794,16 +6834,6 @@ msgid "" "signal is received" msgstr "" -#: src/testbed/gnunet_testbed_mpi_spawn.c:119 -#, fuzzy -msgid "Waiting for child to exit.\n" -msgstr "Đang đợi các đồng đẳng kết nối" - -#: src/testbed/gnunet_testbed_mpi_spawn.c:242 -#, fuzzy, c-format -msgid "Spawning process `%s'\n" -msgstr "Đang bắt đầu tài về « %s »\n" - #: src/testbed/testbed_api.c:399 #, fuzzy, c-format msgid "Adding host %u failed with error: %s\n" @@ -6924,7 +6954,7 @@ msgstr "" #: src/testbed/testbed_api_topology.c:1153 #, fuzzy, c-format -msgid "Ignoring to connect peer %u to peer %u\n" +msgid "Ignoring to connect peer %lu to peer %lu\n" msgstr "đang kết nối đồng đẳng %s:%d tới đồng đẳng %s:%d\n" #: src/testing/gnunet-testing.c:185 @@ -7107,7 +7137,7 @@ msgid "GNUnet topology control" msgstr "" #: src/transport/gnunet-communicator-tcp.c:3221 -#: src/transport/gnunet-communicator-udp.c:2995 +#: src/transport/gnunet-communicator-udp.c:3076 #: src/transport/gnunet-service-tng.c:10014 #: src/transport/gnunet-service-transport.c:2626 #, fuzzy @@ -7118,7 +7148,7 @@ msgstr "Lưu cấu hình ngay bây giờ không?" msgid "GNUnet TCP communicator" msgstr "" -#: src/transport/gnunet-communicator-udp.c:3067 +#: src/transport/gnunet-communicator-udp.c:3148 msgid "GNUnet UDP communicator" msgstr "" @@ -7143,6 +7173,10 @@ msgstr "Không thể tạo miền tên.\n" msgid "GNUnet UNIX domain socket communicator" msgstr "" +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + #: src/transport/gnunet-service-transport.c:445 #, fuzzy msgid "# messages dropped due to slow client" @@ -7187,10 +7221,6 @@ msgstr "Không thể lấy địa chỉ của đồng đẳng « %s ».\n" msgid "Adding blacklisting entry for peer `%s':`%s'\n" msgstr "" -#: src/transport/gnunet-service-transport_ats.c:137 -msgid "# Addresses given to ATS" -msgstr "" - #: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "" @@ -7530,46 +7560,6 @@ msgstr "" msgid "# HELLOs given to peerinfo" msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n" -#: src/transport/gnunet-transport-profiler.c:220 -#, c-format -msgid "%llu B in %llu ms == %.2f KB/s!\n" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:577 -msgid "send data to peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:581 -#, fuzzy -msgid "receive data from peer" -msgstr "Yêu cầu cấp %d từ đồng đẳng %d\n" - -#: src/transport/gnunet-transport-profiler.c:586 -#, fuzzy -msgid "iterations" -msgstr "Tùy chọn chung" - -#: src/transport/gnunet-transport-profiler.c:591 -#, fuzzy -msgid "number of messages to send" -msgstr "số tin nhắn cần dùng mỗi lần lặp" - -#: src/transport/gnunet-transport-profiler.c:596 -#, fuzzy -msgid "message size to use" -msgstr "kích cỡ tin nhắn" - -#: src/transport/gnunet-transport-profiler.c:601 -#: src/transport/gnunet-transport.c:1404 -msgid "peer identity" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:614 -#: src/transport/gnunet-transport.c:1426 -#, fuzzy -msgid "Direct access to transport service." -msgstr "Lỗi kết nối đến gnunetd.\n" - #: src/transport/gnunet-transport.c:406 #, fuzzy, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" @@ -7709,6 +7699,11 @@ msgstr "In ra thông tin về các đồng đẳng GNUnet." msgid "do not resolve hostnames" msgstr "không quyết định các tên máy" +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 +msgid "peer identity" +msgstr "" + #: src/transport/gnunet-transport.c:1408 msgid "monitor plugin sessions" msgstr "" @@ -7717,7 +7712,42 @@ msgstr "" msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "" -#: src/transport/plugin_transport_http_client.c:1489 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 +#, fuzzy +msgid "Direct access to transport service." +msgstr "Lỗi kết nối đến gnunetd.\n" + +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:581 +#, fuzzy +msgid "receive data from peer" +msgstr "Yêu cầu cấp %d từ đồng đẳng %d\n" + +#: src/transport/gnunet-transport-profiler.c:586 +#, fuzzy +msgid "iterations" +msgstr "Tùy chọn chung" + +#: src/transport/gnunet-transport-profiler.c:591 +#, fuzzy +msgid "number of messages to send" +msgstr "số tin nhắn cần dùng mỗi lần lặp" + +#: src/transport/gnunet-transport-profiler.c:596 +#, fuzzy +msgid "message size to use" +msgstr "kích cỡ tin nhắn" + +#: src/transport/plugin_transport_http_client.c:1488 #: src/transport/plugin_transport_http_server.c:2331 #: src/transport/plugin_transport_http_server.c:3562 #: src/transport/plugin_transport_tcp.c:3773 @@ -7725,24 +7755,24 @@ msgstr "" msgid "TCP_STEALTH not supported on this platform.\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2141 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2190 +#: src/transport/plugin_transport_http_client.c:2189 #: src/transport/plugin_transport_http_server.c:3276 #, fuzzy, c-format msgid "Shutting down plugin `%s'\n" msgstr "Đang nạp các truyền tải « %s »\n" -#: src/transport/plugin_transport_http_client.c:2207 +#: src/transport/plugin_transport_http_client.c:2206 #: src/transport/plugin_transport_http_server.c:3346 #, fuzzy, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "Tải lên « %s » hoàn thành, địa chỉ URI là « %s ».\n" -#: src/transport/plugin_transport_http_client.c:2241 +#: src/transport/plugin_transport_http_client.c:2240 #, fuzzy, c-format msgid "Maximum number of requests is %u\n" msgstr "tăng sổ tối đa các kết nối TCP/IP" @@ -7751,7 +7781,7 @@ msgstr "tăng sổ tối đa các kết nối TCP/IP" #, c-format msgid "" "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " -"size %u\n" +"size %lu\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2040 @@ -7791,7 +7821,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2935 -#: src/transport/plugin_transport_udp.c:3397 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -7995,69 +8025,69 @@ msgstr "" msgid "TCP transport advertises itself as being on port %llu\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3169 +#: src/transport/plugin_transport_udp_broadcasting.c:169 +#, fuzzy +msgid "# Multicast HELLO beacons received via UDP" +msgstr "# các thông báo PONG đã mật mã được nhận" + +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:571 +#, c-format +msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" +msgstr "" + +#: src/transport/plugin_transport_udp.c:3170 #, c-format msgid "" "UDP could not transmit message to `%s': Network seems down, please check " "your network configuration\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3182 +#: src/transport/plugin_transport_udp.c:3183 msgid "" "UDP could not transmit IPv6 message! Please check your network configuration " "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3465 -#: src/transport/plugin_transport_udp.c:3550 +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" -#: src/transport/plugin_transport_udp.c:3479 +#: src/transport/plugin_transport_udp.c:3480 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3558 +#: src/transport/plugin_transport_udp.c:3559 #, fuzzy msgid "Failed to open UDP sockets\n" msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" -#: src/transport/plugin_transport_udp.c:3628 -#: src/transport/plugin_transport_udp.c:3641 +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3666 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv4 address" msgstr "« %s » không sẵn sàng.\n" -#: src/transport/plugin_transport_udp.c:3688 +#: src/transport/plugin_transport_udp.c:3689 #, fuzzy msgid "must be valid IPv6 address" msgstr "« %s » không sẵn sàng.\n" -#: src/transport/plugin_transport_udp.c:3749 +#: src/transport/plugin_transport_udp.c:3750 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "Không thể tạo miền tên.\n" -#: src/transport/plugin_transport_udp_broadcasting.c:169 -#, fuzzy -msgid "# Multicast HELLO beacons received via UDP" -msgstr "# các thông báo PONG đã mật mã được nhận" - -#: src/transport/plugin_transport_udp_broadcasting.c:553 -msgid "" -"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:571 -#, c-format -msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "" - #: src/transport/plugin_transport_unix.c:1396 #, fuzzy, c-format msgid "Cannot bind to `%s'\n" @@ -8240,7 +8270,7 @@ msgid "do daemonize (detach from terminal)" msgstr "" #: src/transport/tcp_service_legacy.c:1397 -#: src/transport/transport-testing2.c:983 src/util/service.c:2072 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 #: src/util/service.c:2084 #, fuzzy, c-format msgid "Malformed configuration file `%s', exit ...\n" @@ -8299,7 +8329,7 @@ msgstr "" #: src/util/bio.c:359 #, c-format -msgid "String `%s' longer than allowed (%u > %u)" +msgid "String `%s' longer than allowed (%u > %lu)" msgstr "" #: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 @@ -9034,63 +9064,63 @@ msgid "Failed to expand `$HOME': environment variable `HOME' not set" msgstr "" "Lỗi mở rộng biến môi trường « $HOME »: chưa đặt biến môi trường « HOME »" -#: src/util/strings.c:1240 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "" -#: src/util/strings.c:1248 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1255 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1263 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "" -#: src/util/strings.c:1272 +#: src/util/strings.c:1273 #, fuzzy, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n" -#: src/util/strings.c:1499 src/util/strings.c:1510 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "" -#: src/util/strings.c:1519 +#: src/util/strings.c:1520 #, fuzzy, c-format msgid "Malformed port policy `%s'\n" msgstr "Lỗi bắt đầu thu thập.\n" -#: src/util/strings.c:1602 src/util/strings.c:1631 src/util/strings.c:1678 -#: src/util/strings.c:1698 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "Địa chỉ IP định dạng sai: %s\n" -#: src/util/strings.c:1656 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "Ký hiệu mạng sai (« /%d » không hợp lệ trong CIDR IPv4)." -#: src/util/strings.c:1707 +#: src/util/strings.c:1708 #, fuzzy, c-format msgid "Invalid format: `%s'\n" msgstr "Địa chỉ IP định dạng sai: %s\n" -#: src/util/strings.c:1760 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "Ký hiệu mạng sai (không kết thúc với « ; »: « %s »)\n" -#: src/util/strings.c:1810 +#: src/util/strings.c:1811 #, fuzzy, c-format msgid "Wrong format `%s' for netmask\n" msgstr "Mặt nạ mạng có định dạng sai « %s »: %s\n" -#: src/util/strings.c:1841 +#: src/util/strings.c:1842 #, fuzzy, c-format msgid "Wrong format `%s' for network\n" msgstr "Mạng có định dạng sai « %s »: %s\n" @@ -9284,12 +9314,16 @@ msgstr "# các byte đã nhận qua UDP" msgid "Setup tunnels via VPN." msgstr "" -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:420 -#: src/zonemaster/gnunet-service-zonemaster.c:849 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 #, fuzzy msgid "Failed to connect to the namestore!\n" msgstr "Không kết nối được đến trình nền gnunetd." +#, fuzzy, c-format +#~ msgid "Unable to parse PKEY record `%s'\n" +#~ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" + #~ msgid "b" #~ msgstr "b" diff --git a/po/zh_CN.po b/po/zh_CN.po index a5376561d..1d7fc21a0 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -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: 2020-10-13 16:12+0200\n" +"POT-Creation-Date: 2020-11-13 23:04+0900\n" "PO-Revision-Date: 2011-07-09 12:12+0800\n" "Last-Translator: Wylmer Wang \n" "Language-Team: Chinese (simplified) \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1303 +#: src/abd/gnunet-abd.c:397 src/namestore/gnunet-namestore.c:1302 #, c-format msgid "Ego `%s' not known to identity service\n" msgstr "" @@ -27,8 +27,8 @@ msgid "Issuer public key `%s' is not well-formed\n" msgstr "“%s”的参数无效。\n" #: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 -#: src/namestore/gnunet-namestore-fcfsd.c:1154 #: src/namestore/gnunet-namestore.c:1001 +#: src/namestore/gnunet-namestore-fcfsd.c:1164 #, fuzzy, c-format msgid "Failed to connect to namestore\n" msgstr "初始化“%s”服务失败。\n" @@ -494,15 +494,83 @@ msgstr "" msgid "Initiating shutdown as requested by client.\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:896 -msgid "Stop logging\n" +#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 +#, c-format +msgid "" +"Could not load quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" msgstr "" -#: src/ats-tests/ats-testing-log.c:952 -#, fuzzy, c-format -msgid "Start logging `%s'\n" +#: src/ats/gnunet-ats-solver-eval.c:3011 +#, c-format +msgid "" +"No outbound quota configured for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3063 +#, c-format +msgid "" +"No outbound quota configure for network `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997 +msgid "solver to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3557 +#: src/ats-tests/gnunet-solver-eval.c:1003 +#: src/ats-tests/gnunet-solver-eval.c:1008 +msgid "experiment to use" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3564 +#, fuzzy +msgid "print logging" msgstr "未知的命令“%s”。\n" +#: src/ats/gnunet-ats-solver-eval.c:3569 +msgid "save logging to disk" +msgstr "" + +#: src/ats/gnunet-ats-solver-eval.c:3574 +msgid "disable normalization" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:326 +#, c-format +msgid "" +"Could not load %s quota for network `%s': `%s', assigning default bandwidth " +"%llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:336 +#, c-format +msgid "%s quota configured for network `%s' is %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:382 +#, c-format +msgid "" +"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" +msgstr "" + +#: src/ats/gnunet-service-ats_plugins.c:474 +#, fuzzy, c-format +msgid "Failed to initialize solver `%s'!\n" +msgstr "无法初始化 SQLite:%s。\n" + +#: src/ats/plugin_ats_proportional.c:1142 +#, fuzzy, c-format +msgid "Invalid %s configuration %f \n" +msgstr "解析配置文件“%s”失败\n" + +#: src/ats/plugin_ats_proportional.c:1165 +#, fuzzy, c-format +msgid "Invalid %s configuration %f\n" +msgstr "解析配置文件“%s”失败\n" + #: src/ats-tests/ats-testing.c:420 #, c-format msgid "Connected master [%u] with slave [%u]\n" @@ -513,6 +581,15 @@ msgstr "" msgid "Failed to connect master peer [%u] with slave [%u]\n" msgstr "初始化“%s”服务失败。\n" +#: src/ats-tests/ats-testing-log.c:896 +msgid "Stop logging\n" +msgstr "" + +#: src/ats-tests/ats-testing-log.c:952 +#, fuzzy, c-format +msgid "Start logging `%s'\n" +msgstr "未知的命令“%s”。\n" + #: src/ats-tests/gnunet-ats-sim.c:92 #, c-format msgid "" @@ -520,16 +597,6 @@ msgid "" "= %u KiB/s\n" msgstr "" -#: src/ats-tests/gnunet-solver-eval.c:997 src/ats/gnunet-ats-solver-eval.c:3552 -msgid "solver to use" -msgstr "" - -#: src/ats-tests/gnunet-solver-eval.c:1003 -#: src/ats-tests/gnunet-solver-eval.c:1008 -#: src/ats/gnunet-ats-solver-eval.c:3557 -msgid "experiment to use" -msgstr "" - #: src/ats-tool/gnunet-ats.c:299 #, c-format msgid "%u address resolutions had a timeout\n" @@ -651,73 +718,6 @@ msgstr "" msgid "Print information about ATS state" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044 -#, c-format -msgid "" -"Could not load quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3011 -#, c-format -msgid "" -"No outbound quota configured for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3063 -#, c-format -msgid "" -"No outbound quota configure for network `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3564 -#, fuzzy -msgid "print logging" -msgstr "未知的命令“%s”。\n" - -#: src/ats/gnunet-ats-solver-eval.c:3569 -msgid "save logging to disk" -msgstr "" - -#: src/ats/gnunet-ats-solver-eval.c:3574 -msgid "disable normalization" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:326 -#, c-format -msgid "" -"Could not load %s quota for network `%s': `%s', assigning default bandwidth " -"%llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:336 -#, c-format -msgid "%s quota configured for network `%s' is %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:382 -#, c-format -msgid "" -"No %s-quota configured for network `%s', assigning default bandwidth %llu\n" -msgstr "" - -#: src/ats/gnunet-service-ats_plugins.c:474 -#, fuzzy, c-format -msgid "Failed to initialize solver `%s'!\n" -msgstr "无法初始化 SQLite:%s。\n" - -#: src/ats/plugin_ats_proportional.c:1142 -#, fuzzy, c-format -msgid "Invalid %s configuration %f \n" -msgstr "解析配置文件“%s”失败\n" - -#: src/ats/plugin_ats_proportional.c:1165 -#, fuzzy, c-format -msgid "Invalid %s configuration %f\n" -msgstr "解析配置文件“%s”失败\n" - #: src/auction/gnunet-auction-create.c:163 msgid "description of the item to be sold" msgstr "" @@ -755,7 +755,7 @@ msgstr "" #: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 #: src/conversation/gnunet-conversation-test.c:256 -#: src/revocation/gnunet-revocation.c:552 src/template/gnunet-template.c:75 +#: src/revocation/gnunet-revocation.c:569 src/template/gnunet-template.c:75 msgid "help text" msgstr "" @@ -854,28 +854,6 @@ msgstr "" msgid "Connection to conversation service lost, trying to reconnect\n" msgstr "" -#: src/conversation/gnunet-conversation-test.c:120 -#, c-format -msgid "" -"\n" -"End of transmission. Have a GNU day.\n" -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:146 -#, c-format -msgid "" -"\n" -"We are now playing your recording back. If you can hear it, your audio " -"settings are working..." -msgstr "" - -#: src/conversation/gnunet-conversation-test.c:218 -#, c-format -msgid "" -"We will now be recording you for %s. After that time, the recording will be " -"played back to you..." -msgstr "" - #: src/conversation/gnunet-conversation.c:264 #, c-format msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" @@ -1134,8 +1112,30 @@ msgstr "" msgid "Enables having a conversation with other GNUnet users." msgstr "" -#: src/conversation/gnunet-helper-audio-playback-gst.c:363 +#: src/conversation/gnunet-conversation-test.c:120 +#, c-format +msgid "" +"\n" +"End of transmission. Have a GNU day.\n" +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:146 +#, c-format +msgid "" +"\n" +"We are now playing your recording back. If you can hear it, your audio " +"settings are working..." +msgstr "" + +#: src/conversation/gnunet-conversation-test.c:218 +#, c-format +msgid "" +"We will now be recording you for %s. After that time, the recording will be " +"played back to you..." +msgstr "" + #: src/conversation/gnunet_gst.c:664 +#: src/conversation/gnunet-helper-audio-playback-gst.c:363 #, c-format msgid "Read error from STDIN: %d %s\n" msgstr "" @@ -1261,7 +1261,7 @@ msgstr "“%s”说:%s\n" msgid "Failed to allocate %u bytes for second packet\n" msgstr "初始化“%s”服务失败。\n" -#: src/conversation/gnunet-service-conversation.c:1287 +#: src/conversation/gnunet-service-conversation.c:1286 #, fuzzy, c-format msgid "Could not open line, port %s already in use!\n" msgstr "无法连接到 %s:%u:%s\n" @@ -1963,7 +1963,7 @@ msgid "" msgstr "" #: src/datastore/plugin_datastore_sqlite.c:1316 -#: src/namecache/plugin_namecache_sqlite.c:570 +#: src/namecache/plugin_namecache_sqlite.c:564 #: src/namestore/plugin_namestore_sqlite.c:765 #, fuzzy msgid "Sqlite database running\n" @@ -2036,6 +2036,54 @@ msgstr "" msgid "Prints all packets that go through the DHT." msgstr "" +#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 +#, fuzzy, c-format +msgid "Exiting as the number of peers is %u\n" +msgstr "增加 TCP/IP 的最大连接数" + +#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 +#, fuzzy +msgid "number of peers to start" +msgstr "迭代次数" + +#: src/dht/gnunet_dht_profiler.c:961 +msgid "number of PUTs to perform per peer" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 +#: src/testbed/gnunet-testbed-profiler.c:305 +msgid "name of the file with the login information for the testbed" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:973 +msgid "delay between rounds for collecting statistics (default: 30 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:979 +msgid "delay to start doing PUTs (default: 1 sec)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:985 +msgid "delay to start doing GETs (default: 5 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:990 +msgid "replication degree for DHT PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:996 +msgid "chance that a peer is selected at random for PUTs" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1002 +msgid "timeout for DHT PUT and GET requests (default: 1 min)" +msgstr "" + +#: src/dht/gnunet_dht_profiler.c:1023 +#, fuzzy +msgid "Measure quality and performance of the DHT service." +msgstr "无法访问该服务" + #: src/dht/gnunet-dht-put.c:133 msgid "Must provide KEY and DATA for DHT put!\n" msgstr "" @@ -2281,61 +2329,14 @@ msgstr "" msgid "# DHT requests combined" msgstr "" -#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255 -#, fuzzy, c-format -msgid "Exiting as the number of peers is %u\n" -msgstr "增加 TCP/IP 的最大连接数" - -#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3194 -#, fuzzy -msgid "number of peers to start" -msgstr "迭代次数" - -#: src/dht/gnunet_dht_profiler.c:961 -msgid "number of PUTs to perform per peer" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872 -#: src/testbed/gnunet-testbed-profiler.c:305 -msgid "name of the file with the login information for the testbed" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:973 -msgid "delay between rounds for collecting statistics (default: 30 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:979 -msgid "delay to start doing PUTs (default: 1 sec)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:985 -msgid "delay to start doing GETs (default: 5 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:990 -msgid "replication degree for DHT PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:996 -msgid "chance that a peer is selected at random for PUTs" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1002 -msgid "timeout for DHT PUT and GET requests (default: 1 min)" -msgstr "" - -#: src/dht/gnunet_dht_profiler.c:1023 -#, fuzzy -msgid "Measure quality and performance of the DHT service." -msgstr "无法访问该服务" - #: src/dht/plugin_block_dht.c:189 #, c-format msgid "Block not of type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:198 -msgid "Size mismatch for block\n" +#, c-format +msgid "Size mismatch for block with type %u\n" msgstr "" #: src/dht/plugin_block_dht.c:209 @@ -2766,8 +2767,8 @@ msgstr "" #: src/fs/fs_download.c:1053 #, c-format msgid "" -"Internal error or bogus download URI (expected %u bytes at depth %u and " -"offset %llu/%llu, got %u bytes)" +"Internal error or bogus download URI (expected %lu bytes at depth %u and " +"offset %llu/%llu, got %lu bytes)" msgstr "" #: src/fs/fs_download.c:1075 @@ -3094,7 +3095,7 @@ msgid "" "You must specify one and only one directory name for automatic publication.\n" msgstr "" -#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:888 +#: src/fs/gnunet-auto-share.c:711 src/fs/gnunet-publish.c:896 msgid "set the desired LEVEL of sender-anonymity" msgstr "" @@ -3102,15 +3103,15 @@ msgstr "" msgid "disable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:893 +#: src/fs/gnunet-auto-share.c:724 src/fs/gnunet-publish.c:901 msgid "do not use libextractor to add keywords or metadata" msgstr "" -#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:938 +#: src/fs/gnunet-auto-share.c:731 src/fs/gnunet-publish.c:946 msgid "specify the priority of the content" msgstr "" -#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:951 +#: src/fs/gnunet-auto-share.c:738 src/fs/gnunet-publish.c:959 msgid "set the desired replication LEVEL" msgstr "" @@ -3195,7 +3196,7 @@ msgstr "" msgid "You need to specify a URI argument.\n" msgstr "您必须指定一个昵称\n" -#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:707 +#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:715 #, fuzzy, c-format msgid "Failed to parse URI: %s\n" msgstr "运行 %s失败:%s %d\n" @@ -3208,7 +3209,7 @@ msgstr "" msgid "Target filename must be specified.\n" msgstr "" -#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:861 +#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869 #: src/fs/gnunet-search.c:291 src/fs/gnunet-unindex.c:154 #, fuzzy, c-format msgid "Could not initialize `%s' subsystem.\n" @@ -3248,6 +3249,14 @@ msgid "" "chk/...)" msgstr "" +#: src/fs/gnunet-fs.c:128 +msgid "print a list of all indexed files" +msgstr "" + +#: src/fs/gnunet-fs.c:141 +msgid "Special file-sharing operations" +msgstr "" + #: src/fs/gnunet-fs-profiler.c:211 msgid "run the experiment with COUNT peers" msgstr "" @@ -3264,14 +3273,6 @@ msgstr "" msgid "run a testbed to measure file-sharing performance" msgstr "" -#: src/fs/gnunet-fs.c:128 -msgid "print a list of all indexed files" -msgstr "" - -#: src/fs/gnunet-fs.c:141 -msgid "Special file-sharing operations" -msgstr "" - #: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 #, c-format msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" @@ -3319,144 +3320,144 @@ msgstr "打开日志文件“%s”失败:%s\n" msgid "Keywords for file `%s' (%s)\n" msgstr "无法解析“%s”(%s):%s\n" -#: src/fs/gnunet-publish.c:577 +#: src/fs/gnunet-publish.c:582 #, fuzzy msgid "Could not publish\n" msgstr "无法解析“%s”(%s):%s\n" -#: src/fs/gnunet-publish.c:603 +#: src/fs/gnunet-publish.c:611 msgid "Could not start publishing.\n" msgstr "" -#: src/fs/gnunet-publish.c:636 +#: src/fs/gnunet-publish.c:644 #, fuzzy, c-format msgid "Scanning directory `%s'.\n" msgstr "解析配置文件“%s”失败\n" -#: src/fs/gnunet-publish.c:638 +#: src/fs/gnunet-publish.c:646 #, fuzzy, c-format msgid "Scanning file `%s'.\n" msgstr "未知的命令“%s”。\n" -#: src/fs/gnunet-publish.c:644 +#: src/fs/gnunet-publish.c:652 #, c-format msgid "There was trouble processing file `%s', skipping it.\n" msgstr "" -#: src/fs/gnunet-publish.c:650 +#: src/fs/gnunet-publish.c:658 msgid "Preprocessing complete.\n" msgstr "" -#: src/fs/gnunet-publish.c:656 +#: src/fs/gnunet-publish.c:664 #, fuzzy, c-format msgid "Extracting meta data from file `%s' complete.\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/fs/gnunet-publish.c:662 +#: src/fs/gnunet-publish.c:670 msgid "Meta data extraction has finished.\n" msgstr "" -#: src/fs/gnunet-publish.c:670 +#: src/fs/gnunet-publish.c:678 #, fuzzy msgid "Error scanning directory.\n" msgstr "未知错误。\n" -#: src/fs/gnunet-publish.c:697 +#: src/fs/gnunet-publish.c:705 #, c-format msgid "Selected pseudonym `%s' unknown\n" msgstr "" -#: src/fs/gnunet-publish.c:729 +#: src/fs/gnunet-publish.c:737 #, fuzzy, c-format msgid "Failed to access `%s': %s\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/fs/gnunet-publish.c:746 +#: src/fs/gnunet-publish.c:754 msgid "" "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " "installed?\n" msgstr "" -#: src/fs/gnunet-publish.c:802 +#: src/fs/gnunet-publish.c:810 #, c-format msgid "Cannot extract metadata from a URI!\n" msgstr "" -#: src/fs/gnunet-publish.c:809 +#: src/fs/gnunet-publish.c:817 #, c-format msgid "You must specify one and only one filename for insertion.\n" msgstr "" -#: src/fs/gnunet-publish.c:815 +#: src/fs/gnunet-publish.c:823 #, c-format msgid "You must NOT specify an URI and a filename.\n" msgstr "" -#: src/fs/gnunet-publish.c:824 src/vpn/gnunet-vpn.c:209 +#: src/fs/gnunet-publish.c:832 src/vpn/gnunet-vpn.c:209 #, c-format msgid "Option `%s' is required when using option `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:836 src/fs/gnunet-publish.c:845 +#: src/fs/gnunet-publish.c:844 src/fs/gnunet-publish.c:853 #: src/transport/gnunet-transport.c:1230 src/transport/gnunet-transport.c:1255 #, c-format msgid "Option `%s' makes no sense without option `%s'.\n" msgstr "" -#: src/fs/gnunet-publish.c:898 +#: src/fs/gnunet-publish.c:906 msgid "enable adding the creation time to the metadata of the uploaded file" msgstr "" -#: src/fs/gnunet-publish.c:904 +#: src/fs/gnunet-publish.c:912 msgid "" "print list of extracted keywords that would be used, but do not perform " "upload" msgstr "" -#: src/fs/gnunet-publish.c:912 +#: src/fs/gnunet-publish.c:920 msgid "" "add an additional keyword for the top-level file or directory (this option " "can be specified multiple times)" msgstr "" -#: src/fs/gnunet-publish.c:919 +#: src/fs/gnunet-publish.c:927 msgid "set the meta-data for the given TYPE to the given VALUE" msgstr "" -#: src/fs/gnunet-publish.c:924 +#: src/fs/gnunet-publish.c:932 msgid "" "do not index, perform full insertion (stores entire file in encrypted form " "in GNUnet database)" msgstr "" -#: src/fs/gnunet-publish.c:931 +#: src/fs/gnunet-publish.c:939 msgid "" "specify ID of an updated version to be published in the future (for " "namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:944 +#: src/fs/gnunet-publish.c:952 msgid "publish the files under the pseudonym NAME (place file into namespace)" msgstr "" -#: src/fs/gnunet-publish.c:956 +#: src/fs/gnunet-publish.c:964 msgid "" "only simulate the process but do not do any actual publishing (useful to " "compute URIs)" msgstr "" -#: src/fs/gnunet-publish.c:963 +#: src/fs/gnunet-publish.c:971 msgid "" "set the ID of this version of the publication (for namespace insertions only)" msgstr "" -#: src/fs/gnunet-publish.c:971 +#: src/fs/gnunet-publish.c:979 msgid "" "URI to be published (can be used instead of passing a file to add keywords " "to the file with the respective URI)" msgstr "" -#: src/fs/gnunet-publish.c:989 +#: src/fs/gnunet-publish.c:997 msgid "Publish a file or directory on GNUnet" msgstr "" @@ -3846,7 +3847,7 @@ msgstr "" msgid "Unindex a file that was previously indexed with gnunet-publish." msgstr "" -#: src/gns/gns_tld_api.c:292 +#: src/gns/gns_tld_api.c:293 msgid "Expected a base32-encoded public zone key\n" msgstr "" @@ -3926,7 +3927,51 @@ msgstr "" msgid "look for GNS2DNS records instead of ANY" msgstr "" -#: src/gns/gnunet-gns-import.c:486 +#: src/gns/gnunet-gns.c:257 +#, fuzzy, c-format +msgid "`%s' is not a valid DNS domain name\n" +msgstr "“%s”不可用。\n" + +#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 +#, fuzzy, c-format +msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" +msgstr "打开日志文件“%s”失败:%s\n" + +#: src/gns/gnunet-gns.c:281 +msgid "Cannot resolve using GNS: GNUnet peer not running\n" +msgstr "" + +#: src/gns/gnunet-gns.c:305 +#, c-format +msgid "Invalid typename specified, assuming `ANY'\n" +msgstr "" + +#: src/gns/gnunet-gns.c:340 +msgid "Lookup a record for the given name" +msgstr "" + +#: src/gns/gnunet-gns.c:346 +msgid "Specify the type of the record to lookup" +msgstr "" + +#: src/gns/gnunet-gns.c:352 +msgid "Specify a timeout for the lookup" +msgstr "" + +#: src/gns/gnunet-gns.c:356 +msgid "No unneeded output" +msgstr "" + +#: src/gns/gnunet-gns.c:361 +msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" +msgstr "" + +#: src/gns/gnunet-gns.c:375 +#, fuzzy +msgid "GNUnet GNS resolver tool" +msgstr "GNUnet 错误日志" + +#: src/gns/gnunet-gns-import.c:491 msgid "This program will import some GNS authorities into your GNS namestore." msgstr "" @@ -4046,50 +4091,6 @@ msgstr "" msgid "GNUnet GNS proxy" msgstr "" -#: src/gns/gnunet-gns.c:257 -#, fuzzy, c-format -msgid "`%s' is not a valid DNS domain name\n" -msgstr "“%s”不可用。\n" - -#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254 -#, fuzzy, c-format -msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" -msgstr "打开日志文件“%s”失败:%s\n" - -#: src/gns/gnunet-gns.c:281 -msgid "Cannot resolve using GNS: GNUnet peer not running\n" -msgstr "" - -#: src/gns/gnunet-gns.c:305 -#, c-format -msgid "Invalid typename specified, assuming `ANY'\n" -msgstr "" - -#: src/gns/gnunet-gns.c:340 -msgid "Lookup a record for the given name" -msgstr "" - -#: src/gns/gnunet-gns.c:346 -msgid "Specify the type of the record to lookup" -msgstr "" - -#: src/gns/gnunet-gns.c:352 -msgid "Specify a timeout for the lookup" -msgstr "" - -#: src/gns/gnunet-gns.c:356 -msgid "No unneeded output" -msgstr "" - -#: src/gns/gnunet-gns.c:361 -msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8" -msgstr "" - -#: src/gns/gnunet-gns.c:375 -#, fuzzy -msgid "GNUnet GNS resolver tool" -msgstr "GNUnet 错误日志" - #: src/gns/gnunet-service-gns.c:505 #, fuzzy msgid "Properly base32-encoded public key required" @@ -4101,8 +4102,8 @@ msgid "Failed to connect to the namecache!\n" msgstr "初始化“%s”服务失败。\n" #: src/gns/gnunet-service-gns.c:560 -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:444 -#: src/zonemaster/gnunet-service-zonemaster.c:887 +#: src/zonemaster/gnunet-service-zonemaster.c:885 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 #, fuzzy msgid "Could not connect to DHT!\n" msgstr "无法连接到 %s:%u:%s\n" @@ -4146,66 +4147,70 @@ msgstr "" msgid "VPN returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1909 +#: src/gns/gnunet-service-gns_resolver.c:1910 #, c-format msgid "Name `%s' cannot be converted to IDNA." msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1922 +#: src/gns/gnunet-service-gns_resolver.c:1923 #, c-format msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:1965 +#: src/gns/gnunet-service-gns_resolver.c:1966 #, fuzzy, c-format msgid "GNS lookup failed (zero records found for `%s')\n" msgstr "运行 %s失败:%s %d\n" -#: src/gns/gnunet-service-gns_resolver.c:2385 +#: src/gns/gnunet-service-gns_resolver.c:2393 msgid "GNS lookup recursion failed (no delegation record found)\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2408 +#: src/gns/gnunet-service-gns_resolver.c:2416 #, fuzzy, c-format msgid "Failed to cache GNS resolution: %s\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/gns/gnunet-service-gns_resolver.c:2576 +#: src/gns/gnunet-service-gns_resolver.c:2581 #, c-format msgid "GNS namecache returned empty result for `%s'\n" msgstr "" -#: src/gns/gnunet-service-gns_resolver.c:2716 +#: src/gns/gnunet-service-gns_resolver.c:2721 #, c-format msgid "Zone %s was revoked, resolution fails\n" msgstr "" -#: src/gns/plugin_gnsrecord_gns.c:167 +#: src/gns/plugin_gnsrecord_gns.c:174 #, fuzzy, c-format -msgid "Unable to parse PKEY record `%s'\n" +msgid "Unable to parse zone key record `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/gns/plugin_gnsrecord_gns.c:197 +#: src/gns/plugin_gnsrecord_gns.c:187 +msgid "Record type does not match parsed record type\n" +msgstr "" + +#: src/gns/plugin_gnsrecord_gns.c:213 #, fuzzy, c-format msgid "Unable to parse GNS2DNS record `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/gns/plugin_gnsrecord_gns.c:213 +#: src/gns/plugin_gnsrecord_gns.c:229 #, fuzzy, c-format msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n" msgstr "解析配置文件“%s”失败\n" -#: src/gns/plugin_gnsrecord_gns.c:237 +#: src/gns/plugin_gnsrecord_gns.c:253 #, fuzzy, c-format msgid "Unable to parse VPN record string `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/gns/plugin_gnsrecord_gns.c:269 +#: src/gns/plugin_gnsrecord_gns.c:285 #, fuzzy, c-format msgid "Unable to parse BOX record string `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/gns/plugin_rest_gns.c:447 +#: src/gns/plugin_rest_gns.c:448 msgid "Gns REST API initialized\n" msgstr "" @@ -4511,7 +4516,7 @@ msgid "# hostlist URIs written to file" msgstr "" #: src/hostlist/gnunet-daemon-hostlist_client.c:1657 -#: src/transport/plugin_transport_http_client.c:2301 +#: src/transport/plugin_transport_http_client.c:2300 #, c-format msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" msgstr "" @@ -4638,58 +4643,62 @@ msgstr "“%s”不可用。\n" msgid "Could not start hostlist HTTP server on port %u\n" msgstr "" -#: src/identity/gnunet-identity.c:209 +#: src/identity/gnunet-identity.c:214 #, fuzzy, c-format msgid "Failed to create ego: %s\n" msgstr "发送消息失败。\n" -#: src/identity/gnunet-identity.c:250 +#: src/identity/gnunet-identity.c:255 #, fuzzy, c-format msgid "Failed to set default ego: %s\n" msgstr "发送消息失败。\n" -#: src/identity/gnunet-identity.c:446 +#: src/identity/gnunet-identity.c:462 msgid "create ego NAME" msgstr "" -#: src/identity/gnunet-identity.c:451 +#: src/identity/gnunet-identity.c:467 msgid "delete ego NAME " msgstr "" -#: src/identity/gnunet-identity.c:457 +#: src/identity/gnunet-identity.c:473 msgid "" "set the private key for the identity to PRIVATE_KEY (use together with -C)" msgstr "" -#: src/identity/gnunet-identity.c:461 +#: src/identity/gnunet-identity.c:478 +msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" +msgstr "" + +#: src/identity/gnunet-identity.c:482 msgid "display all egos" msgstr "" -#: src/identity/gnunet-identity.c:465 +#: src/identity/gnunet-identity.c:486 msgid "reduce output" msgstr "" -#: src/identity/gnunet-identity.c:472 +#: src/identity/gnunet-identity.c:493 msgid "" "set default identity to NAME for a subsystem SUBSYSTEM (use together with -" "s) or restrict results to NAME (use together with -d)" msgstr "" -#: src/identity/gnunet-identity.c:476 +#: src/identity/gnunet-identity.c:497 msgid "run in monitor mode egos" msgstr "" -#: src/identity/gnunet-identity.c:480 +#: src/identity/gnunet-identity.c:501 #, fuzzy msgid "display private keys as well" msgstr "显示一个文件的散列值" -#: src/identity/gnunet-identity.c:487 +#: src/identity/gnunet-identity.c:508 msgid "" "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" msgstr "" -#: src/identity/gnunet-identity.c:502 +#: src/identity/gnunet-identity.c:523 msgid "Maintain egos" msgstr "" @@ -4725,26 +4734,26 @@ msgstr "" msgid "no matching ego found" msgstr "" -#: src/identity/gnunet-service-identity.c:1072 +#: src/identity/gnunet-service-identity.c:1133 #, fuzzy, c-format msgid "Failed to parse ego information in `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/identity/gnunet-service-identity.c:1130 +#: src/identity/gnunet-service-identity.c:1191 #, fuzzy, c-format msgid "Failed to parse subsystem identity configuration file `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/identity/gnunet-service-identity.c:1139 +#: src/identity/gnunet-service-identity.c:1200 #, fuzzy, c-format msgid "Failed to create directory `%s' for storing egos\n" msgstr "解析配置文件“%s”失败\n" -#: src/identity/plugin_rest_identity.c:1384 +#: src/identity/plugin_rest_identity.c:1385 msgid "Identity REST API initialized\n" msgstr "" -#: src/json/json.c:133 +#: src/json/json.c:139 #, fuzzy, c-format msgid "Failed to parse JSON in option `%s': %s (%s)\n" msgstr "解析配置文件“%s”失败\n" @@ -4789,7 +4798,7 @@ msgstr "“%s”的参数无效。\n" msgid "You must specify a name\n" msgstr "您必须指定一个接收方!\n" -#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1640 +#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1639 msgid "name of the record to add/delete/display" msgstr "" @@ -4797,22 +4806,22 @@ msgstr "" msgid "specifies the public key of the zone to look in" msgstr "" -#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1701 +#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1700 #, fuzzy msgid "GNUnet zone manipulation tool" msgstr "GNUnet 配置" -#: src/namecache/namecache_api.c:293 +#: src/namecache/namecache_api.c:285 msgid "Namecache failed to cache block" msgstr "" -#: src/namecache/namecache_api.c:381 +#: src/namecache/namecache_api.c:373 #, fuzzy msgid "Error communicating with namecache service" msgstr "连接 %s:%u 出错。守护程序在运行吗?\n" #: src/namecache/plugin_namecache_flat.c:118 -#: src/namecache/plugin_namecache_flat.c:256 +#: src/namecache/plugin_namecache_flat.c:253 #: src/namestore/plugin_namestore_flat.c:176 #: src/namestore/plugin_namestore_flat.c:424 #: src/peerstore/plugin_peerstore_flat.c:380 @@ -4834,7 +4843,7 @@ msgstr "发送消息失败。\n" msgid "Unable to read file: %s.\n" msgstr "发送消息失败。\n" -#: src/namecache/plugin_namecache_flat.c:410 +#: src/namecache/plugin_namecache_flat.c:404 #, fuzzy msgid "flat plugin running\n" msgstr "sqlite 数据仓库" @@ -4847,70 +4856,6 @@ msgstr "sqlite 数据仓库" msgid "Failed to setup database at `%s'\n" msgstr "运行 %s失败:%s %d\n" -#: src/namestore/gnunet-namestore-fcfsd.c:552 -#, fuzzy, c-format -msgid "Unsupported form value `%s'\n" -msgstr "未知的命令“%s”。\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:579 -#, fuzzy, c-format -msgid "Failed to create record for domain `%s': %s\n" -msgstr "解析配置文件“%s”失败\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:600 -msgid "Error when mapping zone to name\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:632 -#, c-format -msgid "Found existing name `%s' for the given key\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:694 -#, c-format -msgid "Found %u existing records for domain `%s'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:784 -#, fuzzy, c-format -msgid "Failed to create page for `%s'\n" -msgstr "发送消息失败。\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:803 -#, fuzzy, c-format -msgid "Failed to setup post processor for `%s'\n" -msgstr "解析配置文件“%s”失败\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:840 -msgid "Domain name must not contain `.'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:849 -msgid "Domain name must not contain `+'\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1084 -msgid "No ego configured for `fcfsd` subsystem\n" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1115 -#, fuzzy -msgid "Failed to start HTTP server\n" -msgstr "初始化“%s”服务失败。\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1163 -#, fuzzy -msgid "Failed to connect to identity\n" -msgstr "初始化“%s”服务失败。\n" - -#: src/namestore/gnunet-namestore-fcfsd.c:1190 -msgid "name of the zone that is to be managed by FCFSD" -msgstr "" - -#: src/namestore/gnunet-namestore-fcfsd.c:1210 -msgid "GNU Name System First Come First Serve name registration service" -msgstr "" - #: src/namestore/gnunet-namestore.c:334 #, c-format msgid "Adding record failed: %s\n" @@ -4926,11 +4871,17 @@ msgstr "" msgid "Deleting record failed%s%s\n" msgstr "" -#: src/namestore/gnunet-namestore.c:656 src/namestore/gnunet-namestore.c:667 +#: src/namestore/gnunet-namestore.c:656 #, c-format msgid "A %s record exists already under `%s', no other records can be added.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:668 +#, c-format +msgid "" +"A zone key record exists already under `%s', no other records can be added.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:680 #, c-format msgid "" @@ -4938,11 +4889,16 @@ msgid "" "zone.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:696 src/namestore/gnunet-namestore.c:710 +#: src/namestore/gnunet-namestore.c:696 #, c-format msgid "Records already exist under `%s', cannot add `%s' record.\n" msgstr "" +#: src/namestore/gnunet-namestore.c:711 +#, c-format +msgid "Records already exist under `%s', cannot add record.\n" +msgstr "" + #: src/namestore/gnunet-namestore.c:726 #, c-format msgid "" @@ -4973,7 +4929,7 @@ msgstr "" #: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066 #: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105 #: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153 -#: src/namestore/gnunet-namestore.c:1229 +#: src/namestore/gnunet-namestore.c:1228 #, fuzzy, c-format msgid "Missing option `%s' for operation `%s'\n" msgstr "配置文件“%s”已写入。\n" @@ -4989,7 +4945,7 @@ msgstr "无效条目。\n" #: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078 #: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128 -#: src/namestore/gnunet-namestore.c:1231 +#: src/namestore/gnunet-namestore.c:1230 msgid "add" msgstr "" @@ -5008,7 +4964,7 @@ msgstr "" msgid "Value `%s' invalid for record type `%s'\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1238 +#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1237 #, fuzzy, c-format msgid "Invalid time format `%s'\n" msgstr "IP 格式无效:“%s”\n" @@ -5017,23 +4973,23 @@ msgstr "IP 格式无效:“%s”\n" msgid "del" msgstr "" -#: src/namestore/gnunet-namestore.c:1198 +#: src/namestore/gnunet-namestore.c:1197 #, fuzzy, c-format msgid "Invalid public key for reverse lookup `%s'\n" msgstr "“%s”的参数无效。\n" -#: src/namestore/gnunet-namestore.c:1221 +#: src/namestore/gnunet-namestore.c:1220 #: src/peerinfo-tool/gnunet-peerinfo.c:736 #, fuzzy, c-format msgid "Invalid URI `%s'\n" msgstr "无效条目。\n" -#: src/namestore/gnunet-namestore.c:1291 +#: src/namestore/gnunet-namestore.c:1290 #, c-format msgid "Label `%s' contains `.' which is not allowed\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1341 +#: src/namestore/gnunet-namestore.c:1340 #, c-format msgid "" "No default identity configured for `namestore' subsystem\n" @@ -5041,105 +4997,174 @@ msgid "" "Run gnunet-identity -d to get a list of choices for $NAME\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1406 +#: src/namestore/gnunet-namestore.c:1405 #, c-format msgid "Superfluous command line arguments (starting with `%s') ignored\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1435 +#: src/namestore/gnunet-namestore.c:1434 #, fuzzy, c-format msgid "Cannot connect to identity service\n" msgstr "无法连接到 %s:%u:%s\n" -#: src/namestore/gnunet-namestore.c:1482 +#: src/namestore/gnunet-namestore.c:1481 msgid "Empty record line argument is not allowed.\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1494 +#: src/namestore/gnunet-namestore.c:1493 #, c-format msgid "Invalid expiration time `%s' (must be without unit)\n" msgstr "" -#: src/namestore/gnunet-namestore.c:1506 src/namestore/gnunet-namestore.c:1522 -#: src/namestore/gnunet-namestore.c:1539 +#: src/namestore/gnunet-namestore.c:1505 src/namestore/gnunet-namestore.c:1521 +#: src/namestore/gnunet-namestore.c:1538 #, fuzzy, c-format msgid "Missing entries in record line `%s'.\n" msgstr "解析配置文件“%s”失败\n" -#: src/namestore/gnunet-namestore.c:1514 +#: src/namestore/gnunet-namestore.c:1513 #, fuzzy, c-format msgid "Unknown record type `%s'\n" msgstr "未知的命令“%s”。\n" -#: src/namestore/gnunet-namestore.c:1552 +#: src/namestore/gnunet-namestore.c:1551 #, fuzzy, c-format msgid "Invalid record data for type %s: `%s'.\n" msgstr "IP 格式无效:“%s”\n" -#: src/namestore/gnunet-namestore.c:1609 +#: src/namestore/gnunet-namestore.c:1608 msgid "add record" msgstr "" -#: src/namestore/gnunet-namestore.c:1612 +#: src/namestore/gnunet-namestore.c:1611 msgid "delete record" msgstr "" -#: src/namestore/gnunet-namestore.c:1616 +#: src/namestore/gnunet-namestore.c:1615 msgid "display records" msgstr "" -#: src/namestore/gnunet-namestore.c:1623 +#: src/namestore/gnunet-namestore.c:1622 msgid "" "expiration time for record to use (for adding only), \"never\" is possible" msgstr "" -#: src/namestore/gnunet-namestore.c:1629 +#: src/namestore/gnunet-namestore.c:1628 #, fuzzy msgid "set the desired nick name for the zone" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/namestore/gnunet-namestore.c:1634 +#: src/namestore/gnunet-namestore.c:1633 #, fuzzy msgid "monitor changes in the namestore" msgstr "初始化“%s”服务失败。\n" -#: src/namestore/gnunet-namestore.c:1646 +#: src/namestore/gnunet-namestore.c:1645 #, fuzzy msgid "determine our name for the given PKEY" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/namestore/gnunet-namestore.c:1653 +#: src/namestore/gnunet-namestore.c:1652 msgid "" "set record set to values given by (possibly multiple) RECORDLINES; can be " "specified multiple times" msgstr "" -#: src/namestore/gnunet-namestore.c:1659 +#: src/namestore/gnunet-namestore.c:1658 msgid "type of the record to add/delete/display" msgstr "" -#: src/namestore/gnunet-namestore.c:1664 +#: src/namestore/gnunet-namestore.c:1663 msgid "URI to import into our zone" msgstr "" -#: src/namestore/gnunet-namestore.c:1670 +#: src/namestore/gnunet-namestore.c:1669 msgid "value of the record to add/delete" msgstr "" -#: src/namestore/gnunet-namestore.c:1674 +#: src/namestore/gnunet-namestore.c:1673 msgid "create or list public record" msgstr "" -#: src/namestore/gnunet-namestore.c:1680 +#: src/namestore/gnunet-namestore.c:1679 msgid "" "create shadow record (only valid if all other records of the same type have " "expired" msgstr "" -#: src/namestore/gnunet-namestore.c:1686 +#: src/namestore/gnunet-namestore.c:1685 msgid "name of the ego controlling the zone" msgstr "" +#: src/namestore/gnunet-namestore-fcfsd.c:552 +#, fuzzy, c-format +msgid "Unsupported form value `%s'\n" +msgstr "未知的命令“%s”。\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:579 +#, fuzzy, c-format +msgid "Failed to create record for domain `%s': %s\n" +msgstr "解析配置文件“%s”失败\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:600 +msgid "Error when mapping zone to name\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:633 +#, c-format +msgid "Found existing name `%s' for the given key\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:646 +#, fuzzy +msgid "Error creating record data.\n" +msgstr "未知错误。\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:707 +#, c-format +msgid "Found %u existing records for domain `%s'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:796 +#, fuzzy, c-format +msgid "Failed to create page for `%s'\n" +msgstr "发送消息失败。\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:815 +#, fuzzy, c-format +msgid "Failed to setup post processor for `%s'\n" +msgstr "解析配置文件“%s”失败\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:850 +msgid "Domain name must not contain `.'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:859 +msgid "Domain name must not contain `+'\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1094 +msgid "No ego configured for `fcfsd` subsystem\n" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1125 +#, fuzzy +msgid "Failed to start HTTP server\n" +msgstr "初始化“%s”服务失败。\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1173 +#, fuzzy +msgid "Failed to connect to identity\n" +msgstr "初始化“%s”服务失败。\n" + +#: src/namestore/gnunet-namestore-fcfsd.c:1200 +msgid "name of the zone that is to be managed by FCFSD" +msgstr "" + +#: src/namestore/gnunet-namestore-fcfsd.c:1220 +msgid "GNU Name System First Come First Serve name registration service" +msgstr "" + #: src/namestore/gnunet-service-namestore.c:866 #, fuzzy, c-format msgid "Failed to replicate block in namecache: %s\n" @@ -5167,7 +5192,7 @@ msgstr "" msgid "Namestore database file `%s' malformed\n" msgstr "" -#: src/namestore/plugin_namestore_flat.c:789 +#: src/namestore/plugin_namestore_flat.c:792 #, fuzzy msgid "Flat file database running\n" msgstr "sqlite 数据仓库" @@ -5455,41 +5480,95 @@ msgstr "" msgid "`upnpc' command not found\n" msgstr "" +#: src/nse/gnunet-nse.c:124 +msgid "Show network size estimates from NSE service." +msgstr "" + #: src/nse/gnunet-nse-profiler.c:857 msgid "limit to the number of connections to NSE services, 0 for none" msgstr "" -#: src/nse/gnunet-nse-profiler.c:864 -msgid "name of the file for writing connection information and statistics" +#: src/nse/gnunet-nse-profiler.c:864 +msgid "name of the file for writing connection information and statistics" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:879 +msgid "name of the file for writing the main results" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:888 +msgid "Number of peers to run in each round, separated by commas" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:900 +msgid "delay between rounds" +msgstr "" + +#: src/nse/gnunet-nse-profiler.c:912 +#, fuzzy +msgid "Measure quality and performance of the NSE service." +msgstr "无法访问该服务" + +#: src/nse/gnunet-service-nse.c:1443 +#: src/revocation/gnunet-service-revocation.c:875 src/util/gnunet-scrypt.c:257 +#, fuzzy +msgid "Value is too large.\n" +msgstr "值不在合法范围内。" + +#: src/peerinfo/gnunet-service-peerinfo.c:175 +#, c-format +msgid "Removing expired address of transport `%s'\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:306 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s': %s\n" +msgstr "解析配置文件“%s”失败\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:323 +#: src/peerinfo/gnunet-service-peerinfo.c:348 +#, fuzzy, c-format +msgid "Failed to parse HELLO in file `%s'\n" +msgstr "解析配置文件“%s”失败\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:426 +msgid "# peers known" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:468 +#, c-format +msgid "" +"File `%s' in directory `%s' does not match naming convention. Removed.\n" +msgstr "" + +#: src/peerinfo/gnunet-service-peerinfo.c:624 +#, fuzzy, c-format +msgid "Scanning directory `%s'\n" +msgstr "解析配置文件“%s”失败\n" + +#: src/peerinfo/gnunet-service-peerinfo.c:631 +#, c-format +msgid "Still no peers found in `%s'!\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:879 -msgid "name of the file for writing the main results" -msgstr "" +#: src/peerinfo/gnunet-service-peerinfo.c:1024 +#, fuzzy, c-format +msgid "Cleaning up directory `%s'\n" +msgstr "解析配置文件“%s”失败\n" -#: src/nse/gnunet-nse-profiler.c:888 -msgid "Number of peers to run in each round, separated by commas" +#: src/peerinfo/gnunet-service-peerinfo.c:1319 +#, c-format +msgid "Importing HELLOs from `%s'\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:900 -msgid "delay between rounds" +#: src/peerinfo/gnunet-service-peerinfo.c:1332 +msgid "Skipping import of included HELLOs\n" msgstr "" -#: src/nse/gnunet-nse-profiler.c:912 -#, fuzzy -msgid "Measure quality and performance of the NSE service." -msgstr "无法访问该服务" - -#: src/nse/gnunet-nse.c:124 -msgid "Show network size estimates from NSE service." +#: src/peerinfo/peerinfo_api.c:217 +msgid "Failed to receive response from `PEERINFO' service." msgstr "" -#: src/nse/gnunet-service-nse.c:1443 -#: src/revocation/gnunet-service-revocation.c:834 src/util/gnunet-scrypt.c:257 -#, fuzzy -msgid "Value is too large.\n" -msgstr "值不在合法范围内。" - #: src/peerinfo-tool/gnunet-peerinfo.c:237 #, fuzzy, c-format msgid "%sPeer `%s'\n" @@ -5586,60 +5665,6 @@ msgstr "解析配置文件“%s”失败\n" msgid "Peerinfo REST API initialized\n" msgstr "" -#: src/peerinfo/gnunet-service-peerinfo.c:175 -#, c-format -msgid "Removing expired address of transport `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:306 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s': %s\n" -msgstr "解析配置文件“%s”失败\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:323 -#: src/peerinfo/gnunet-service-peerinfo.c:348 -#, fuzzy, c-format -msgid "Failed to parse HELLO in file `%s'\n" -msgstr "解析配置文件“%s”失败\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:426 -msgid "# peers known" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:468 -#, c-format -msgid "" -"File `%s' in directory `%s' does not match naming convention. Removed.\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:624 -#, fuzzy, c-format -msgid "Scanning directory `%s'\n" -msgstr "解析配置文件“%s”失败\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:631 -#, c-format -msgid "Still no peers found in `%s'!\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1024 -#, fuzzy, c-format -msgid "Cleaning up directory `%s'\n" -msgstr "解析配置文件“%s”失败\n" - -#: src/peerinfo/gnunet-service-peerinfo.c:1319 -#, c-format -msgid "Importing HELLOs from `%s'\n" -msgstr "" - -#: src/peerinfo/gnunet-service-peerinfo.c:1332 -msgid "Skipping import of included HELLOs\n" -msgstr "" - -#: src/peerinfo/peerinfo_api.c:217 -msgid "Failed to receive response from `PEERINFO' service." -msgstr "" - #: src/peerstore/gnunet-peerstore.c:92 msgid "peerstore" msgstr "" @@ -5826,7 +5851,7 @@ msgstr "" msgid "re:claimID command line tool" msgstr "" -#: src/reclaim/plugin_rest_openid_connect.c:2618 +#: src/reclaim/plugin_rest_openid_connect.c:2613 msgid "OpenID Connect REST API initialized\n" msgstr "" @@ -5982,118 +6007,135 @@ msgstr "" msgid "Internal error, key revocation might have failed\n" msgstr "" -#: src/revocation/gnunet-revocation.c:251 +#: src/revocation/gnunet-revocation.c:252 msgid "Cancelling calculation.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:296 +#: src/revocation/gnunet-revocation.c:299 #, c-format msgid "Revocation certificate for `%s' stored in `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:335 +#: src/revocation/gnunet-revocation.c:339 #, c-format msgid "Ego `%s' not found.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:349 +#: src/revocation/gnunet-revocation.c:356 #, c-format msgid "Error: revocation certificate in `%s' is not for `%s'\n" msgstr "" -#: src/revocation/gnunet-revocation.c:359 +#: src/revocation/gnunet-revocation.c:366 msgid "Revocation certificate ready\n" msgstr "" -#: src/revocation/gnunet-revocation.c:371 +#: src/revocation/gnunet-revocation.c:378 msgid "Continuing calculation where left off...\n" msgstr "" -#: src/revocation/gnunet-revocation.c:378 +#: src/revocation/gnunet-revocation.c:385 msgid "Revocation certificate not ready, calculating proof of work\n" msgstr "" -#: src/revocation/gnunet-revocation.c:416 +#: src/revocation/gnunet-revocation.c:423 #, fuzzy, c-format msgid "Public key `%s' malformed\n" msgstr "“%s”的参数无效。\n" -#: src/revocation/gnunet-revocation.c:426 +#: src/revocation/gnunet-revocation.c:433 msgid "" "Testing and revoking at the same time is not allowed, only executing test.\n" msgstr "" -#: src/revocation/gnunet-revocation.c:456 +#: src/revocation/gnunet-revocation.c:463 #, fuzzy msgid "No filename to store revocation certificate given.\n" msgstr "解析配置文件“%s”失败\n" -#: src/revocation/gnunet-revocation.c:471 +#: src/revocation/gnunet-revocation.c:480 #, fuzzy, c-format msgid "Failed to read revocation certificate from `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/revocation/gnunet-revocation.c:493 +#: src/revocation/gnunet-revocation.c:488 +#, fuzzy, c-format +msgid "Revocation certificate corrupted in `%s'\n" +msgstr "解析配置文件“%s”失败\n" + +#: src/revocation/gnunet-revocation.c:510 #, fuzzy msgid "No action specified. Nothing to do.\n" msgstr "没有指定接口,将使用默认。\n" -#: src/revocation/gnunet-revocation.c:512 +#: src/revocation/gnunet-revocation.c:529 msgid "use NAME for the name of the revocation file" msgstr "" -#: src/revocation/gnunet-revocation.c:520 +#: src/revocation/gnunet-revocation.c:537 msgid "" "revoke the private key associated for the the private key associated with " "the ego NAME " msgstr "" -#: src/revocation/gnunet-revocation.c:527 +#: src/revocation/gnunet-revocation.c:544 msgid "actually perform revocation, otherwise we just do the precomputation" msgstr "" -#: src/revocation/gnunet-revocation.c:534 +#: src/revocation/gnunet-revocation.c:551 msgid "test if the public key KEY has been revoked" msgstr "" -#: src/revocation/gnunet-revocation.c:540 +#: src/revocation/gnunet-revocation.c:557 #, fuzzy msgid "number of epochs to calculate for" msgstr "迭代次数" -#: src/revocation/gnunet-service-revocation.c:454 +#: src/revocation/gnunet-service-revocation.c:494 msgid "# unsupported revocations received via set union" msgstr "" -#: src/revocation/gnunet-service-revocation.c:464 +#: src/revocation/gnunet-service-revocation.c:504 msgid "# revocation messages received via set union" msgstr "" -#: src/revocation/gnunet-service-revocation.c:469 +#: src/revocation/gnunet-service-revocation.c:509 #, c-format msgid "Error computing revocation set union with %s\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:473 +#: src/revocation/gnunet-service-revocation.c:513 #, fuzzy msgid "# revocation set unions failed" msgstr "" "\n" "按任意键继续\n" -#: src/revocation/gnunet-service-revocation.c:481 +#: src/revocation/gnunet-service-revocation.c:521 msgid "# revocation set unions completed" msgstr "" -#: src/revocation/gnunet-service-revocation.c:519 +#: src/revocation/gnunet-service-revocation.c:559 msgid "SET service crashed, terminating revocation service\n" msgstr "" -#: src/revocation/gnunet-service-revocation.c:871 +#: src/revocation/gnunet-service-revocation.c:912 #, fuzzy msgid "Could not open revocation database file!" msgstr "无法连接到 %s:%u:%s\n" +#: src/rps/gnunet-rps.c:270 +msgid "Seed a PeerID" +msgstr "" + +#: src/rps/gnunet-rps.c:275 +msgid "Get updates of view (0 for infinite updates)" +msgstr "" + +#: src/rps/gnunet-rps.c:279 +msgid "Get peers from biased stream" +msgstr "" + #: src/rps/gnunet-rps-profiler.c:3200 msgid "duration of the profiling" msgstr "" @@ -6112,18 +6154,6 @@ msgstr "迭代次数" msgid "Measure quality and performance of the RPS service." msgstr "无法访问该服务" -#: src/rps/gnunet-rps.c:270 -msgid "Seed a PeerID" -msgstr "" - -#: src/rps/gnunet-rps.c:275 -msgid "Get updates of view (0 for infinite updates)" -msgstr "" - -#: src/rps/gnunet-rps.c:279 -msgid "Get peers from biased stream" -msgstr "" - #: src/scalarproduct/gnunet-scalarproduct.c:229 #, fuzzy msgid "You must specify at least one message ID to check!\n" @@ -6179,10 +6209,10 @@ msgstr "" msgid "Calculate the Vectorproduct with a GNUnet peer." msgstr "" -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 -#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118 +#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063 #, fuzzy msgid "Connect to CADET failed\n" msgstr "“%s”已连接到“%s”。\n" @@ -6208,7 +6238,7 @@ msgid "also profile decryption" msgstr "" #: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 -#: src/setu/gnunet-service-setu.c:3635 +#: src/setu/gnunet-service-setu.c:3633 #, fuzzy msgid "Could not connect to CADET service\n" msgstr "无法连接到 %s:%u:%s\n" @@ -6537,6 +6567,15 @@ msgstr "" msgid "%.s Unknown result code." msgstr "" +#: src/testbed/gnunet_testbed_mpi_spawn.c:119 +msgid "Waiting for child to exit.\n" +msgstr "" + +#: src/testbed/gnunet_testbed_mpi_spawn.c:242 +#, fuzzy, c-format +msgid "Spawning process `%s'\n" +msgstr "卸载 GNUnet 服务" + #: src/testbed/gnunet-testbed-profiler.c:290 msgid "tolerate COUNT number of continious timeout failures" msgstr "" @@ -6548,15 +6587,6 @@ msgid "" "signal is received" msgstr "" -#: src/testbed/gnunet_testbed_mpi_spawn.c:119 -msgid "Waiting for child to exit.\n" -msgstr "" - -#: src/testbed/gnunet_testbed_mpi_spawn.c:242 -#, fuzzy, c-format -msgid "Spawning process `%s'\n" -msgstr "卸载 GNUnet 服务" - #: src/testbed/testbed_api.c:399 #, fuzzy, c-format msgid "Adding host %u failed with error: %s\n" @@ -6677,7 +6707,7 @@ msgstr "" #: src/testbed/testbed_api_topology.c:1153 #, fuzzy, c-format -msgid "Ignoring to connect peer %u to peer %u\n" +msgid "Ignoring to connect peer %lu to peer %lu\n" msgstr "无法连接到 %s:%u:%s\n" #: src/testing/gnunet-testing.c:185 @@ -6854,7 +6884,7 @@ msgid "GNUnet topology control" msgstr "" #: src/transport/gnunet-communicator-tcp.c:3221 -#: src/transport/gnunet-communicator-udp.c:2995 +#: src/transport/gnunet-communicator-udp.c:3076 #: src/transport/gnunet-service-tng.c:10014 #: src/transport/gnunet-service-transport.c:2626 #, fuzzy @@ -6865,7 +6895,7 @@ msgstr "立即保存配置?" msgid "GNUnet TCP communicator" msgstr "" -#: src/transport/gnunet-communicator-udp.c:3067 +#: src/transport/gnunet-communicator-udp.c:3148 msgid "GNUnet UDP communicator" msgstr "" @@ -6890,6 +6920,10 @@ msgstr "发送消息失败。\n" msgid "GNUnet UNIX domain socket communicator" msgstr "" +#: src/transport/gnunet-service-transport_ats.c:137 +msgid "# Addresses given to ATS" +msgstr "" + #: src/transport/gnunet-service-transport.c:445 msgid "# messages dropped due to slow client" msgstr "" @@ -6930,10 +6964,6 @@ msgstr "卸载 GNUnet 服务" msgid "Adding blacklisting entry for peer `%s':`%s'\n" msgstr "" -#: src/transport/gnunet-service-transport_ats.c:137 -msgid "# Addresses given to ATS" -msgstr "" - #: src/transport/gnunet-service-transport_hello.c:195 msgid "# refreshed my HELLO" msgstr "" @@ -7242,44 +7272,6 @@ msgstr "" msgid "# HELLOs given to peerinfo" msgstr "" -#: src/transport/gnunet-transport-profiler.c:220 -#, c-format -msgid "%llu B in %llu ms == %.2f KB/s!\n" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:577 -msgid "send data to peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:581 -msgid "receive data from peer" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:586 -msgid "iterations" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:591 -#, fuzzy -msgid "number of messages to send" -msgstr "每次迭代所使用的消息数量" - -#: src/transport/gnunet-transport-profiler.c:596 -#, fuzzy -msgid "message size to use" -msgstr "消息尺寸" - -#: src/transport/gnunet-transport-profiler.c:601 -#: src/transport/gnunet-transport.c:1404 -msgid "peer identity" -msgstr "" - -#: src/transport/gnunet-transport-profiler.c:614 -#: src/transport/gnunet-transport.c:1426 -#, fuzzy -msgid "Direct access to transport service." -msgstr "初始化“%s”服务失败。\n" - #: src/transport/gnunet-transport.c:406 #, c-format msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" @@ -7416,6 +7408,11 @@ msgstr "" msgid "do not resolve hostnames" msgstr "" +#: src/transport/gnunet-transport.c:1404 +#: src/transport/gnunet-transport-profiler.c:601 +msgid "peer identity" +msgstr "" + #: src/transport/gnunet-transport.c:1408 msgid "monitor plugin sessions" msgstr "" @@ -7424,7 +7421,40 @@ msgstr "" msgid "send data for benchmarking to the other peer (until CTRL-C)" msgstr "" -#: src/transport/plugin_transport_http_client.c:1489 +#: src/transport/gnunet-transport.c:1426 +#: src/transport/gnunet-transport-profiler.c:614 +#, fuzzy +msgid "Direct access to transport service." +msgstr "初始化“%s”服务失败。\n" + +#: src/transport/gnunet-transport-profiler.c:220 +#, c-format +msgid "%llu B in %llu ms == %.2f KB/s!\n" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:577 +msgid "send data to peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:581 +msgid "receive data from peer" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:586 +msgid "iterations" +msgstr "" + +#: src/transport/gnunet-transport-profiler.c:591 +#, fuzzy +msgid "number of messages to send" +msgstr "每次迭代所使用的消息数量" + +#: src/transport/gnunet-transport-profiler.c:596 +#, fuzzy +msgid "message size to use" +msgstr "消息尺寸" + +#: src/transport/plugin_transport_http_client.c:1488 #: src/transport/plugin_transport_http_server.c:2331 #: src/transport/plugin_transport_http_server.c:3562 #: src/transport/plugin_transport_tcp.c:3773 @@ -7432,24 +7462,24 @@ msgstr "" msgid "TCP_STEALTH not supported on this platform.\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2141 +#: src/transport/plugin_transport_http_client.c:2140 #, c-format msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2190 +#: src/transport/plugin_transport_http_client.c:2189 #: src/transport/plugin_transport_http_server.c:3276 #, fuzzy, c-format msgid "Shutting down plugin `%s'\n" msgstr "未知的命令“%s”。\n" -#: src/transport/plugin_transport_http_client.c:2207 +#: src/transport/plugin_transport_http_client.c:2206 #: src/transport/plugin_transport_http_server.c:3346 #, c-format msgid "Shutdown for plugin `%s' complete\n" msgstr "" -#: src/transport/plugin_transport_http_client.c:2241 +#: src/transport/plugin_transport_http_client.c:2240 #, fuzzy, c-format msgid "Maximum number of requests is %u\n" msgstr "增加 TCP/IP 的最大连接数" @@ -7458,7 +7488,7 @@ msgstr "增加 TCP/IP 的最大连接数" #, c-format msgid "" "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " -"size %u\n" +"size %lu\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2040 @@ -7498,7 +7528,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2935 -#: src/transport/plugin_transport_udp.c:3397 +#: src/transport/plugin_transport_udp.c:3398 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -7700,68 +7730,68 @@ msgstr "" msgid "TCP transport advertises itself as being on port %llu\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3169 +#: src/transport/plugin_transport_udp_broadcasting.c:169 +msgid "# Multicast HELLO beacons received via UDP" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:553 +msgid "" +"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" +msgstr "" + +#: src/transport/plugin_transport_udp_broadcasting.c:571 +#, c-format +msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" +msgstr "" + +#: src/transport/plugin_transport_udp.c:3170 #, c-format msgid "" "UDP could not transmit message to `%s': Network seems down, please check " "your network configuration\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3182 +#: src/transport/plugin_transport_udp.c:3183 msgid "" "UDP could not transmit IPv6 message! Please check your network configuration " "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3465 -#: src/transport/plugin_transport_udp.c:3550 +#: src/transport/plugin_transport_udp.c:3466 +#: src/transport/plugin_transport_udp.c:3551 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/transport/plugin_transport_udp.c:3479 +#: src/transport/plugin_transport_udp.c:3480 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3558 +#: src/transport/plugin_transport_udp.c:3559 #, fuzzy msgid "Failed to open UDP sockets\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/transport/plugin_transport_udp.c:3628 -#: src/transport/plugin_transport_udp.c:3641 +#: src/transport/plugin_transport_udp.c:3629 +#: src/transport/plugin_transport_udp.c:3642 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3666 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv4 address" msgstr "“%s”不可用。\n" -#: src/transport/plugin_transport_udp.c:3688 +#: src/transport/plugin_transport_udp.c:3689 #, fuzzy msgid "must be valid IPv6 address" msgstr "“%s”不可用。\n" -#: src/transport/plugin_transport_udp.c:3749 +#: src/transport/plugin_transport_udp.c:3750 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "发送消息失败。\n" -#: src/transport/plugin_transport_udp_broadcasting.c:169 -msgid "# Multicast HELLO beacons received via UDP" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:553 -msgid "" -"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" -msgstr "" - -#: src/transport/plugin_transport_udp_broadcasting.c:571 -#, c-format -msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" -msgstr "" - #: src/transport/plugin_transport_unix.c:1396 #, fuzzy, c-format msgid "Cannot bind to `%s'\n" @@ -7934,7 +7964,7 @@ msgid "do daemonize (detach from terminal)" msgstr "" #: src/transport/tcp_service_legacy.c:1397 -#: src/transport/transport-testing2.c:983 src/util/service.c:2072 +#: src/transport/transport-testing2.c:985 src/util/service.c:2072 #: src/util/service.c:2084 #, fuzzy, c-format msgid "Malformed configuration file `%s', exit ...\n" @@ -7993,7 +8023,7 @@ msgstr "" #: src/util/bio.c:359 #, c-format -msgid "String `%s' longer than allowed (%u > %u)" +msgid "String `%s' longer than allowed (%u > %lu)" msgstr "" #: src/util/bio.c:398 src/util/bio.c:864 src/util/bio.c:881 @@ -8719,63 +8749,63 @@ msgstr "" msgid "Failed to expand `$HOME': environment variable `HOME' not set" msgstr "扩展“$HOME”失败:没有设置环境变量“HOME”" -#: src/util/strings.c:1240 +#: src/util/strings.c:1241 msgid "IPv6 address did not start with `['\n" msgstr "" -#: src/util/strings.c:1248 +#: src/util/strings.c:1249 msgid "IPv6 address did contain ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1255 +#: src/util/strings.c:1256 msgid "IPv6 address did contain ']' before ':' to separate port number\n" msgstr "" -#: src/util/strings.c:1263 +#: src/util/strings.c:1264 msgid "IPv6 address did contain a valid port number after the last ':'\n" msgstr "" -#: src/util/strings.c:1272 +#: src/util/strings.c:1273 #, fuzzy, c-format msgid "Invalid IPv6 address `%s': %s\n" msgstr "无效的进程优先级“%s”\n" -#: src/util/strings.c:1499 src/util/strings.c:1510 +#: src/util/strings.c:1500 src/util/strings.c:1511 msgid "Port not in range\n" msgstr "" -#: src/util/strings.c:1519 +#: src/util/strings.c:1520 #, fuzzy, c-format msgid "Malformed port policy `%s'\n" msgstr "解析配置文件“%s”失败\n" -#: src/util/strings.c:1602 src/util/strings.c:1631 src/util/strings.c:1678 -#: src/util/strings.c:1698 +#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 +#: src/util/strings.c:1699 #, c-format msgid "Invalid format for IP: `%s'\n" msgstr "IP 格式无效:“%s”\n" -#: src/util/strings.c:1656 +#: src/util/strings.c:1657 #, c-format msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." msgstr "网络表示法无效(“/%d” 在 IPv4 CIDR 中是非法的)。" -#: src/util/strings.c:1707 +#: src/util/strings.c:1708 #, fuzzy, c-format msgid "Invalid format: `%s'\n" msgstr "IP 格式无效:“%s”\n" -#: src/util/strings.c:1760 +#: src/util/strings.c:1761 #, c-format msgid "Invalid network notation (does not end with ';': `%s')\n" msgstr "无效的网络表示法(没有以“;”结尾:“%s”)\n" -#: src/util/strings.c:1810 +#: src/util/strings.c:1811 #, c-format msgid "Wrong format `%s' for netmask\n" msgstr "网络掩码的格式“%s”错误\n" -#: src/util/strings.c:1841 +#: src/util/strings.c:1842 #, c-format msgid "Wrong format `%s' for network\n" msgstr "网络的格式“%s”错误\n" @@ -8961,12 +8991,16 @@ msgstr "" msgid "Setup tunnels via VPN." msgstr "" -#: src/zonemaster/gnunet-service-zonemaster-monitor.c:420 -#: src/zonemaster/gnunet-service-zonemaster.c:849 +#: src/zonemaster/gnunet-service-zonemaster.c:847 +#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 #, fuzzy msgid "Failed to connect to the namestore!\n" msgstr "初始化“%s”服务失败。\n" +#, fuzzy, c-format +#~ msgid "Unable to parse PKEY record `%s'\n" +#~ msgstr "解析配置文件“%s”失败\n" + #~ msgid "b" #~ msgstr "b" diff --git a/src/ats-tests/ats-testing-log.c b/src/ats-tests/ats-testing-log.c index 955401dd8..dfdfa8a80 100644 --- a/src/ats-tests/ats-testing-log.c +++ b/src/ats-tests/ats-testing-log.c @@ -467,7 +467,8 @@ GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, for (c_m = 0; c_m < l->num_masters; c_m++) { GNUNET_asprintf (&filename_master, "%s_%llu_master%u_%s", - experiment_name, timestamp.abs_value_us, c_m, l->name); + experiment_name, + (unsigned long long) timestamp.abs_value_us, c_m, l->name); fprintf (stderr, "Writing data for master %u to file `%s'\n", c_m, filename_master); @@ -495,7 +496,9 @@ GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, for (c_s = 0; c_s < l->lp[c_m].peer->num_partners; c_s++) { GNUNET_asprintf (&filename_slaves[c_s], "%s_%llu_master%u_slave_%u_%s", - tmp_exp_name, timestamp.abs_value_us, c_m, c_s, l->name); + tmp_exp_name, + (unsigned long long) timestamp.abs_value_us, + c_m, c_s, l->name); fprintf (stderr, "Writing data for master %u slave %u to file `%s'\n", c_m, c_s, filename_slaves[c_s]); @@ -593,7 +596,7 @@ GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, (double) plt->app_rtt / 1000, plt->bandwidth_in, plt->bandwidth_out, - plt->ats_delay.rel_value_us, + (unsigned long long) plt->ats_delay.rel_value_us, plt->ats_distance, plt->ats_network_type, plt->ats_utilization_out, diff --git a/src/auction/gnunet-service-auction.c b/src/auction/gnunet-service-auction.c index 82519919d..c20f0bdbe 100644 --- a/src/auction/gnunet-service-auction.c +++ b/src/auction/gnunet-service-auction.c @@ -56,12 +56,12 @@ handle_create (void *cls, const struct GNUNET_AUCTION_ClientCreateMessage *msg) // struct GNUNET_MQ_Handle *mq; // struct GNUNET_MQ_Envelope *env; // struct GNUNET_AUCTION_blabla em; - uint16_t size; + //uint16_t size; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received CREATE message from client\n"); - size = ntohs (msg->header.size); + //size = ntohs (msg->header.size); /**TODO: create auction and return auction object */ // mq = GNUNET_SERVICE_client_get_mq (client); diff --git a/src/cadet/gnunet-service-cadet_channel.c b/src/cadet/gnunet-service-cadet_channel.c index ae6d21452..6b22ae2b4 100644 --- a/src/cadet/gnunet-service-cadet_channel.c +++ b/src/cadet/gnunet-service-cadet_channel.c @@ -1362,7 +1362,7 @@ GCCH_handle_channel_plaintext_data ( (1LLU << delta), mid_msg, mid_min, - ch->mid_futures); + (unsigned long long) ch->mid_futures); } } else /* ! ch->reliable */ diff --git a/src/cadet/gnunet-service-cadet_tunnels.c b/src/cadet/gnunet-service-cadet_tunnels.c index 78bc54a5c..c1c511da1 100644 --- a/src/cadet/gnunet-service-cadet_tunnels.c +++ b/src/cadet/gnunet-service-cadet_tunnels.c @@ -2433,7 +2433,8 @@ connection_ready_cb (void *cls, LOG (GNUNET_ERROR_TYPE_DEBUG, "Do not begin KX for %s if WE have no channels waiting. Retrying after %llu\n", GCT_2s (t), - GNUNET_TIME_absolute_get_remaining (t->next_kx_attempt).rel_value_us); + (unsigned long long) GNUNET_TIME_absolute_get_remaining ( + t->next_kx_attempt).rel_value_us); /* Do not begin KX if WE have no channels waiting! */ if (0 != GNUNET_TIME_absolute_get_remaining ( t->next_kx_attempt).rel_value_us) @@ -3279,7 +3280,7 @@ GCT_handle_encrypted (struct CadetTConnection *ct, { struct CadetTunnel *t = ct->t; uint16_t size = ntohs (msg->header.size); - char cbuf [size] GNUNET_ALIGN; + char cbuf[size] GNUNET_ALIGN; ssize_t decrypted_size; LOG (GNUNET_ERROR_TYPE_DEBUG, diff --git a/src/dht/dht_api.c b/src/dht/dht_api.c index 1eaed8a5c..ee56c852f 100644 --- a/src/dht/dht_api.c +++ b/src/dht/dht_api.c @@ -740,8 +740,8 @@ process_client_result (void *cls, LOG (GNUNET_ERROR_TYPE_DEBUG, "Ignoring reply for %s: UID mismatch: %llu/%llu\n", GNUNET_h2s (key), - crm->unique_id, - get_handle->unique_id); + (unsigned long long) crm->unique_id, + (unsigned long long) get_handle->unique_id); return GNUNET_YES; } /* FIXME: might want to check that type matches */ diff --git a/src/dns/gnunet-dns-monitor.c b/src/dns/gnunet-dns-monitor.c index 836d65c79..48923b613 100644 --- a/src/dns/gnunet-dns-monitor.c +++ b/src/dns/gnunet-dns-monitor.c @@ -216,7 +216,7 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) GNUNET_asprintf (&tmp, "%.*s", (unsigned int) record->data.raw.data_len, - record->data.raw.data); + (char*) record->data.raw.data); format = tmp; break; diff --git a/src/dns/gnunet-service-dns.c b/src/dns/gnunet-service-dns.c index 1cb238add..4840c0c95 100644 --- a/src/dns/gnunet-service-dns.c +++ b/src/dns/gnunet-service-dns.c @@ -557,7 +557,7 @@ next_phase (struct RequestRecord *rr) /* done with current phase, advance! */ LOG (GNUNET_ERROR_TYPE_DEBUG, "Request %llu now in phase %d\n", - rr->request_id, + (unsigned long long) rr->request_id, rr->phase); switch (rr->phase) { diff --git a/src/fs/fs_uri.c b/src/fs/fs_uri.c index 9c430ad9d..a9afff3e8 100644 --- a/src/fs/fs_uri.c +++ b/src/fs/fs_uri.c @@ -1969,7 +1969,7 @@ uri_chk_to_string (const struct GNUNET_FS_Uri *uri) GNUNET_FS_URI_CHK_INFIX, (const char *) &keyhash, (const char *) &queryhash, - GNUNET_ntohll (fi->file_length)); + (unsigned long long) GNUNET_ntohll (fi->file_length)); return ret; } diff --git a/src/include/Makefile.am b/src/include/Makefile.am index fc3d745a6..5569c87ed 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -51,6 +51,7 @@ gnunetinclude_HEADERS = \ gnunet_getopt_lib.h \ gnunet_gns_service.h \ gnunet_gnsrecord_lib.h \ + gnunet_gnsrecord_json_lib.h \ gnunet_gnsrecord_plugin.h \ gnunet_hello_lib.h \ gnunet_helper_lib.h \ diff --git a/src/nse/gnunet-nse-profiler.c b/src/nse/gnunet-nse-profiler.c index f653a716e..4b256bc52 100644 --- a/src/nse/gnunet-nse-profiler.c +++ b/src/nse/gnunet-nse-profiler.c @@ -391,8 +391,8 @@ stat_iterator (void *cls, flag = 1; size = GNUNET_asprintf (&output_buffer, "%llu %llu %u\n", - now.abs_value_us / 1000LL / 1000LL, - value, + (unsigned long long) now.abs_value_us / 1000LL / 1000LL, + (unsigned long long) value, flag); if (0 > size) { diff --git a/src/set/gnunet-service-set_union.c b/src/set/gnunet-service-set_union.c index 931d7e753..c06b7cddf 100644 --- a/src/set/gnunet-service-set_union.c +++ b/src/set/gnunet-service-set_union.c @@ -931,7 +931,7 @@ handle_union_p2p_strata_estimator (void *cls, LOG (GNUNET_ERROR_TYPE_DEBUG, "Deciding to go for full set transmission (diff=%d, own set=%llu)\n", diff, - op->state->initial_size); + (unsigned long long) op->state->initial_size); GNUNET_STATISTICS_update (_GSS_statistics, "# of full sends", 1, diff --git a/src/setu/gnunet-service-setu.c b/src/setu/gnunet-service-setu.c index d00303ca7..e7f27bd7d 100644 --- a/src/setu/gnunet-service-setu.c +++ b/src/setu/gnunet-service-setu.c @@ -1431,7 +1431,7 @@ handle_union_p2p_strata_estimator (void *cls, LOG (GNUNET_ERROR_TYPE_DEBUG, "Deciding to go for full set transmission (diff=%d, own set=%llu)\n", diff, - op->initial_size); + (unsigned long long) op->initial_size); GNUNET_STATISTICS_update (_GSS_statistics, "# of full sends", 1, diff --git a/src/testbed/gnunet-service-testbed_oc.c b/src/testbed/gnunet-service-testbed_oc.c index 3d13ac8cc..8a61f72f7 100644 --- a/src/testbed/gnunet-service-testbed_oc.c +++ b/src/testbed/gnunet-service-testbed_oc.c @@ -535,7 +535,7 @@ cleanup_occ (struct OverlayConnectContext *occ) struct Peer *peer2; LOG_DEBUG ("0x%llx: Cleaning up occ\n", - occ->op_id); + (unsigned long long) occ->op_id); GNUNET_free (occ->emsg); GNUNET_free (occ->hello); if (NULL != occ->send_hello_task) @@ -656,7 +656,7 @@ send_overlay_connect_success_msg (struct OverlayConnectContext *occ) struct GNUNET_TESTBED_ConnectionEventMessage *msg; LOG_DEBUG ("0x%llx: Peers connected - Sending overlay connect success\n", - occ->op_id); + (unsigned long long) occ->op_id); env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_TESTBED_PEER_CONNECT_EVENT); msg->event_type = htonl (GNUNET_TESTBED_ET_CONNECT); @@ -704,7 +704,7 @@ overlay_connect_notify (void *cls, } GNUNET_free (new_peer_str); LOG_DEBUG ("0x%llx: Peer %s connected to peer %s\n", - occ->op_id, + (unsigned long long) occ->op_id, other_peer_str, GNUNET_i2s (&occ->peer_identity)); GNUNET_free (other_peer_str); @@ -763,7 +763,7 @@ occ_cache_get_handle_ats_occ_cb (void *cls, { GNUNET_asprintf (&occ->emsg, "0x%llx: Failed to connect to ATS of peer with id: %u", - occ->op_id, + (unsigned long long) occ->op_id, occ->peer->id); GNUNET_SCHEDULER_cancel (occ->timeout_task); occ->timeout_task = @@ -775,7 +775,7 @@ occ_cache_get_handle_ats_occ_cb (void *cls, GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout during GNUNET_ATS_connectivity_suggest() at peer %s", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->other_peer_identity)); lp2c = &occ->p2ctx.local; @@ -846,7 +846,7 @@ occ_hello_sent_cb (void *cls) GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while acquiring ATS of %s from cache", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->other_peer_identity)); GNUNET_assert (NULL != (peer2 = GST_peer_list[occ->other_peer_id])); lp2c->tcc.cgh_p2_ats = @@ -878,7 +878,7 @@ send_hello_thru_rocc (struct OverlayConnectContext *occ) other_peer_str = GNUNET_strdup (GNUNET_i2s (&occ->other_peer_identity)); LOG_DEBUG ( "0x%llx: Offering HELLO of %s (size: %u) to %s via Remote Overlay Request\n", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity), ntohs (occ->hello->size), other_peer_str); @@ -926,7 +926,7 @@ send_hello (void *cls) lp2c = &occ->p2ctx.local; other_peer_str = GNUNET_strdup (GNUNET_i2s (&occ->other_peer_identity)); LOG_DEBUG ("0x%llx: Offering HELLO of %s to %s\n", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity), other_peer_str); GNUNET_free (other_peer_str); @@ -975,7 +975,7 @@ p2_transport_connect_cache_callback (void *cls, { GNUNET_asprintf (&occ->emsg, "0x%llx: Cannot connect to TRANSPORT of %s", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->other_peer_identity)); GNUNET_SCHEDULER_cancel (occ->timeout_task); occ->timeout_task = @@ -986,7 +986,7 @@ p2_transport_connect_cache_callback (void *cls, occ->p2ctx.local.tcc.cfg = cfg; GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while offering HELLO to %s", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->other_peer_identity)); occ->send_hello_task = GNUNET_SCHEDULER_add_now (&send_hello, occ); } @@ -1026,7 +1026,7 @@ p2_transport_connect (struct OverlayConnectContext *occ) } GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while offering HELLO to %s", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->other_peer_identity)); occ->send_hello_task = GNUNET_SCHEDULER_add_now (&send_hello, occ); } @@ -1077,12 +1077,12 @@ hello_update_cb (void *cls, if (GNUNET_YES == empty) { LOG_DEBUG ("0x%llx: HELLO of %s is empty\n", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity)); return; } LOG_DEBUG ("0x%llx: Received HELLO of %s\n", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity)); occ->hello = GNUNET_malloc (msize); GST_cache_add_hello (occ->peer->id, hello); @@ -1124,7 +1124,7 @@ p1_transport_connect_cache_callback (void *cls, { GNUNET_asprintf (&occ->emsg, "0x%llx: Cannot connect to TRANSPORT of %s", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity)); GNUNET_SCHEDULER_cancel (occ->timeout_task); occ->timeout_task = @@ -1136,7 +1136,7 @@ p1_transport_connect_cache_callback (void *cls, occ->p1th_ = th; GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while acquiring HELLO of peer %s", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity)); occ->ghh = GNUNET_TRANSPORT_hello_get (cfg, GNUNET_TRANSPORT_AC_ANY, @@ -1172,7 +1172,7 @@ occ_cache_get_handle_core_cb (void *cls, GNUNET_asprintf (&occ->emsg, "0x%llx: Failed to connect to CORE of peer with " "id: %u", - occ->op_id, + (unsigned long long) occ->op_id, occ->peer->id); GNUNET_SCHEDULER_cancel (occ->timeout_task); occ->timeout_task = @@ -1185,7 +1185,7 @@ occ_cache_get_handle_core_cb (void *cls, &occ->other_peer_identity)) { LOG_DEBUG ("0x%llx: Target peer already connected\n", - occ->op_id); + (unsigned long long) occ->op_id); GNUNET_SCHEDULER_cancel (occ->timeout_task); occ->timeout_task = NULL; send_overlay_connect_success_msg (occ); @@ -1194,13 +1194,13 @@ occ_cache_get_handle_core_cb (void *cls, } occ->peer_identity = *my_identity; LOG_DEBUG ("0x%llx: Acquiring HELLO of peer %s\n", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity)); /* Lookup for HELLO in hello cache */ if (NULL != (hello = GST_cache_lookup_hello (occ->peer->id))) { LOG_DEBUG ("0x%llx: HELLO of peer %s found in cache\n", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity)); occ->hello = GNUNET_copy_message (hello); p2_transport_connect (occ); @@ -1208,7 +1208,7 @@ occ_cache_get_handle_core_cb (void *cls, } GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while acquiring TRANSPORT of %s from cache", - occ->op_id, + (unsigned long long) occ->op_id, GNUNET_i2s (&occ->peer_identity)); occ->cgh_p1th = GST_connection_pool_get_handle (occ->peer->id, @@ -1253,7 +1253,7 @@ overlay_connect_get_config (void *cls, GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while connecting to CORE of peer with " "id: %u", - occ->op_id, + (unsigned long long) occ->op_id, occ->peer->id); occ->cgh_ch = GST_connection_pool_get_handle (occ->peer->id, @@ -1425,7 +1425,8 @@ forward_overlay_connect (const struct GNUNET_TESTBED_OverlayConnectMessage *msg, GNUNET_assert (VALID_HOST_ID (peer2_host_id)); peer = GST_peer_list[p1]; GNUNET_assert (GNUNET_YES == peer->is_remote); - LOG_DEBUG ("0x%llx: Forwarding overlay connect\n", op_id); + LOG_DEBUG ("0x%llx: Forwarding overlay connect\n", + (unsigned long long) op_id); route_to_peer2_host = GST_find_dest_route (peer2_host_id); route_to_peer1_host = GST_find_dest_route (peer->details.remote.remote_host_id); @@ -1512,7 +1513,7 @@ p2_controller_connect_cb (void *cls, GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while getting peer identity of peer " "with id: %u", - occ->op_id, + (unsigned long long) occ->op_id, occ->other_peer_id); } @@ -1551,7 +1552,7 @@ handle_overlay_connect (void *cls, ("Received overlay connect for peers %u and %u with op id: 0x%llx\n", p1, p2, - operation_id); + (unsigned long long) operation_id); peer2_host_id = ntohl (msg->peer2_host_id); if (GNUNET_YES == peer->is_remote) { @@ -1577,7 +1578,7 @@ handle_overlay_connect (void *cls, GNUNET_break (0); LOG (GNUNET_ERROR_TYPE_WARNING, "0x%llx: Peer %u's host not in our neighbours list\n", - operation_id, p2); + (unsigned long long) operation_id, p2); GNUNET_SERVICE_client_drop (client); GNUNET_free (occ); return; @@ -1611,7 +1612,7 @@ handle_overlay_connect (void *cls, GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while acquiring connection to peer %u's " "host: %u\n", - occ->op_id, + (unsigned long long) occ->op_id, occ->other_peer_id, peer2_host_id); occ->p2ctx.remote.ncn @@ -1633,7 +1634,7 @@ handle_overlay_connect (void *cls, GNUNET_asprintf (&occ->emsg, "0x%llx: Timeout while connecting to CORE of peer with " "id: %u", - occ->op_id, + (unsigned long long) occ->op_id, occ->peer->id); occ->cgh_ch = GST_connection_pool_get_handle (occ->peer->id, @@ -1658,7 +1659,7 @@ static void cleanup_rocc (struct RemoteOverlayConnectCtx *rocc) { LOG_DEBUG ("0x%llx: Cleaning up rocc\n", - rocc->op_id); + (unsigned long long) rocc->op_id); if (NULL != rocc->attempt_connect_task_id) GNUNET_SCHEDULER_cancel (rocc->attempt_connect_task_id); if (NULL != rocc->timeout_rocc_task_id) @@ -1695,7 +1696,7 @@ timeout_rocc_task (void *cls) GNUNET_assert (rocc->timeout_rocc_task_id != NULL); rocc->timeout_rocc_task_id = NULL; LOG_DEBUG ("0x%llx: rocc timed out\n", - rocc->op_id); + (unsigned long long) rocc->op_id); cleanup_rocc (rocc); } @@ -1714,12 +1715,12 @@ cache_transport_peer_connect_notify (void *cls, struct RemoteOverlayConnectCtx *rocc = cls; LOG_DEBUG ("0x%llx: Request Overlay connect notify\n", - rocc->op_id); + (unsigned long long) rocc->op_id); GNUNET_assert (0 == memcmp (new_peer, &rocc->a_id, sizeof(struct GNUNET_PeerIdentity))); LOG_DEBUG ("0x%llx: Peer %s connected\n", - rocc->op_id, + (unsigned long long) rocc->op_id, GNUNET_i2s (&rocc->a_id)); cleanup_rocc (rocc); } @@ -1750,7 +1751,7 @@ rocc_hello_sent_cb (void *cls) rocc->ohh = NULL; GNUNET_assert (NULL == rocc->attempt_connect_task_id); LOG_DEBUG ("0x%llx: HELLO of peer %s delivered to local peer with id: %u\n", - rocc->op_id, + (unsigned long long) rocc->op_id, GNUNET_i2s (&rocc->a_id), rocc->peer->id); rocc->tcc.cgh_p2_ats = @@ -1776,7 +1777,7 @@ attempt_connect_task (void *cls) GNUNET_assert (NULL != rocc->attempt_connect_task_id); rocc->attempt_connect_task_id = NULL; LOG_DEBUG ("0x%llx: Offering HELLO of peer %s to remote peer with id: %u\n", - rocc->op_id, + (unsigned long long) rocc->op_id, GNUNET_i2s (&rocc->a_id), rocc->peer->id); rocc->ohh = @@ -1828,7 +1829,7 @@ rocc_cache_get_handle_transport_cb (void *cls, &rocc->a_id)) { LOG_DEBUG ("0x%llx: Target peer %s already connected to local peer: %u\n", - rocc->op_id, + (unsigned long long) rocc->op_id, GNUNET_i2s (&rocc->a_id), rocc->peer->id); cleanup_rocc (rocc); @@ -1924,7 +1925,7 @@ handle_remote_overlay_connect (void *cls, sizeof(pid_str)); LOG_DEBUG ( "0x%llx: Remote overlay connect %s to peer %s with hello size: %u\n", - rocc->op_id, + (unsigned long long) rocc->op_id, pid_str, GNUNET_i2s (&rocc->a_id), hsize); diff --git a/src/testbed/testbed_api.c b/src/testbed/testbed_api.c index 09752ba28..f291892c6 100644 --- a/src/testbed/testbed_api.c +++ b/src/testbed/testbed_api.c @@ -448,7 +448,8 @@ handle_opsuccess ( uint64_t op_id; op_id = GNUNET_ntohll (msg->operation_id); - LOG_DEBUG ("Operation %llu successful\n", op_id); + LOG_DEBUG ("Operation %llu successful\n", + (unsigned long long) op_id); if (NULL == (opc = find_opc (c, op_id))) { LOG_DEBUG ("Operation not found\n"); diff --git a/src/transport/gnunet-helper-transport-wlan.c b/src/transport/gnunet-helper-transport-wlan.c index 83ade115b..f1b190993 100644 --- a/src/transport/gnunet-helper-transport-wlan.c +++ b/src/transport/gnunet-helper-transport-wlan.c @@ -2004,7 +2004,7 @@ main (int argc, char *argv[]) (void) close (dev.fd_raw); return 1; } - strncpy (dev.iface, argv[1], IFNAMSIZ); + memcpy (dev.iface, argv[1], IFNAMSIZ); if (0 != open_device_raw (&dev)) { (void) close (dev.fd_raw); diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c index 92e37a91c..a819d82a5 100644 --- a/src/transport/gnunet-service-transport.c +++ b/src/transport/gnunet-service-transport.c @@ -695,12 +695,13 @@ handle_send_transmit_continuation (void *cls, { struct SendTransmitContinuationContext *stcc = cls; struct SendOkMessage send_ok_msg; +#ifdef ENABLE_TTD struct GNUNET_TIME_Relative delay; const struct GNUNET_HELLO_Address *addr; delay = GNUNET_TIME_absolute_get_duration (stcc->send_time); addr = GST_neighbour_get_current_address (&stcc->target); -#ifdef ENABLE_TTD + if (delay.rel_value_us > GNUNET_CONSTANTS_LATENCY_WARN.rel_value_us) GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "It took us %s to send %u/%u bytes to %s (%d, %s)\n", diff --git a/src/transport/plugin_transport_wlan.c b/src/transport/plugin_transport_wlan.c index 74b8d5a8a..1b2b6d0d2 100644 --- a/src/transport/plugin_transport_wlan.c +++ b/src/transport/plugin_transport_wlan.c @@ -1436,8 +1436,8 @@ wlan_plugin_send (void *cls, char buf[size] GNUNET_ALIGN; LOG (GNUNET_ERROR_TYPE_DEBUG, - "Transmitting %u bytes of payload to peer `%s' (starting with %u byte message of type %u)\n", - msgbuf_size, + "Transmitting %llu bytes of payload to peer `%s' (starting with %u byte message of type %u)\n", + (unsigned long long) msgbuf_size, GNUNET_i2s (&session->target), (unsigned int) ntohs (((struct GNUNET_MessageHeader*) msgbuf)->size), (unsigned int) ntohs (((struct GNUNET_MessageHeader*) msgbuf)->type)); @@ -1871,8 +1871,9 @@ handle_helper_message (void *cls, if (msize < sizeof(struct GNUNET_TRANSPORT_WLAN_RadiotapReceiveMessage)) { LOG (GNUNET_ERROR_TYPE_DEBUG, - "Size of packet is too small (%u bytes < %u)\n", - msize, sizeof(struct GNUNET_TRANSPORT_WLAN_RadiotapReceiveMessage)); + "Size of packet is too small (%llu bytes < %llu)\n", + (unsigned long long) msize, + (unsigned long long) sizeof(struct GNUNET_TRANSPORT_WLAN_RadiotapReceiveMessage)); break; } rxinfo = (const struct GNUNET_TRANSPORT_WLAN_RadiotapReceiveMessage *) hdr; -- cgit v1.2.3