tor-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
May 2020
- 18 participants
- 1587 discussions
commit 445df9e7b5bbb0ea080bbed25dc4f3b52b0eb7df
Author: David Goulet <dgoulet(a)torproject.org>
Date: Tue May 5 13:24:03 2020 -0400
relay: New file relay_resolve_addr.{c|h}
This commit moves router_pick_published_address() and the related helper
functions into the new file.
The log_addr_has_changed() function has been made public in router.h so we can
use it in relay_resolve_addr.c.
This is a refactoring as part of Sponsor 55. Only code movement at this
commit.
Part of #33789
Signed-off-by: David Goulet <dgoulet(a)torproject.org>
---
src/feature/client/transports.c | 1 +
src/feature/control/control_getinfo.c | 1 +
src/feature/dirclient/dirclient.c | 1 +
src/feature/dirclient/dirclient_modes.c | 1 +
src/feature/relay/include.am | 2 +
src/feature/relay/relay_resolve_addr.c | 132 ++++++++++++++++++++++++++++++++
src/feature/relay/relay_resolve_addr.h | 23 ++++++
src/feature/relay/router.c | 118 +---------------------------
src/feature/relay/router.h | 8 +-
src/test/test_config.c | 1 +
10 files changed, 167 insertions(+), 121 deletions(-)
diff --git a/src/feature/client/transports.c b/src/feature/client/transports.c
index 55069bb60..b2a39c678 100644
--- a/src/feature/client/transports.c
+++ b/src/feature/client/transports.c
@@ -97,6 +97,7 @@
#include "core/or/circuitbuild.h"
#include "feature/client/transports.h"
#include "feature/relay/router.h"
+#include "feature/relay/relay_resolve_addr.h"
/* 31851: split the server transport code out of the client module */
#include "feature/relay/transport_config.h"
#include "app/config/statefile.h"
diff --git a/src/feature/control/control_getinfo.c b/src/feature/control/control_getinfo.c
index 5dcc4b170..673920c9b 100644
--- a/src/feature/control/control_getinfo.c
+++ b/src/feature/control/control_getinfo.c
@@ -44,6 +44,7 @@
#include "feature/nodelist/nodelist.h"
#include "feature/nodelist/routerinfo.h"
#include "feature/nodelist/routerlist.h"
+#include "feature/relay/relay_resolve_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routermode.h"
#include "feature/relay/selftest.h"
diff --git a/src/feature/dirclient/dirclient.c b/src/feature/dirclient/dirclient.c
index 2072dddad..c80a6606a 100644
--- a/src/feature/dirclient/dirclient.c
+++ b/src/feature/dirclient/dirclient.c
@@ -44,6 +44,7 @@
#include "feature/nodelist/routerinfo.h"
#include "feature/nodelist/routerlist.h"
#include "feature/nodelist/routerset.h"
+#include "feature/relay/relay_resolve_addr.h"
#include "feature/relay/routermode.h"
#include "feature/relay/selftest.h"
#include "feature/rend/rendcache.h"
diff --git a/src/feature/dirclient/dirclient_modes.c b/src/feature/dirclient/dirclient_modes.c
index 23fd1a2f6..b385a6e86 100644
--- a/src/feature/dirclient/dirclient_modes.c
+++ b/src/feature/dirclient/dirclient_modes.c
@@ -16,6 +16,7 @@
#include "feature/dirclient/dirclient_modes.h"
#include "feature/dircache/dirserv.h"
+#include "feature/relay/relay_resolve_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routermode.h"
#include "feature/stats/predict_ports.h"
diff --git a/src/feature/relay/include.am b/src/feature/relay/include.am
index 654432c34..2aa298560 100644
--- a/src/feature/relay/include.am
+++ b/src/feature/relay/include.am
@@ -2,6 +2,7 @@
# Legacy shared relay code: migrate to the relay module over time
LIBTOR_APP_A_SOURCES += \
src/feature/relay/onion_queue.c \
+ src/feature/relay/relay_resolve_addr.c \
src/feature/relay/router.c
# The Relay module.
@@ -31,6 +32,7 @@ noinst_HEADERS += \
src/feature/relay/relay_handshake.h \
src/feature/relay/relay_periodic.h \
src/feature/relay/relay_sys.h \
+ src/feature/relay/relay_resolve_addr.h \
src/feature/relay/router.h \
src/feature/relay/routerkeys.h \
src/feature/relay/routermode.h \
diff --git a/src/feature/relay/relay_resolve_addr.c b/src/feature/relay/relay_resolve_addr.c
new file mode 100644
index 000000000..7d83d870c
--- /dev/null
+++ b/src/feature/relay/relay_resolve_addr.c
@@ -0,0 +1,132 @@
+/* Copyright (c) 2001-2020, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file relay_resolve_addr.c
+ * \brief Implement relay resolving address mechanism.
+ **/
+
+#include "core/or/or.h"
+
+#include "app/config/config.h"
+
+#include "core/mainloop/mainloop.h"
+
+#include "feature/control/control_events.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
+
+/** The most recently guessed value of our IP address, based on directory
+ * headers. */
+static tor_addr_t last_guessed_ip = TOR_ADDR_NULL;
+
+/** We failed to resolve our address locally, but we'd like to build
+ * a descriptor and publish / test reachability. If we have a guess
+ * about our address based on directory headers, answer it and return
+ * 0; else return -1. */
+static int
+router_guess_address_from_dir_headers(uint32_t *guess)
+{
+ if (!tor_addr_is_null(&last_guessed_ip)) {
+ *guess = tor_addr_to_ipv4h(&last_guessed_ip);
+ return 0;
+ }
+ return -1;
+}
+
+/** A directory server <b>d_conn</b> told us our IP address is
+ * <b>suggestion</b>.
+ * If this address is different from the one we think we are now, and
+ * if our computer doesn't actually know its IP address, then switch. */
+void
+router_new_address_suggestion(const char *suggestion,
+ const dir_connection_t *d_conn)
+{
+ tor_addr_t addr;
+ uint32_t cur = 0; /* Current IPv4 address. */
+ const or_options_t *options = get_options();
+
+ /* first, learn what the IP address actually is */
+ if (tor_addr_parse(&addr, suggestion) == -1) {
+ log_debug(LD_DIR, "Malformed X-Your-Address-Is header %s. Ignoring.",
+ escaped(suggestion));
+ return;
+ }
+
+ log_debug(LD_DIR, "Got X-Your-Address-Is: %s.", suggestion);
+
+ if (!server_mode(options)) {
+ tor_addr_copy(&last_guessed_ip, &addr);
+ return;
+ }
+
+ /* XXXX ipv6 */
+ cur = get_last_resolved_addr();
+ if (cur ||
+ resolve_my_address(LOG_INFO, options, &cur, NULL, NULL) >= 0) {
+ /* We're all set -- we already know our address. Great. */
+ tor_addr_from_ipv4h(&last_guessed_ip, cur); /* store it in case we
+ need it later */
+ return;
+ }
+ if (tor_addr_is_internal(&addr, 0)) {
+ /* Don't believe anybody who says our IP is, say, 127.0.0.1. */
+ return;
+ }
+ if (tor_addr_eq(&d_conn->base_.addr, &addr)) {
+ /* Don't believe anybody who says our IP is their IP. */
+ log_debug(LD_DIR, "A directory server told us our IP address is %s, "
+ "but they are just reporting their own IP address. Ignoring.",
+ suggestion);
+ return;
+ }
+
+ /* Okay. We can't resolve our own address, and X-Your-Address-Is is giving
+ * us an answer different from what we had the last time we managed to
+ * resolve it. */
+ if (!tor_addr_eq(&last_guessed_ip, &addr)) {
+ control_event_server_status(LOG_NOTICE,
+ "EXTERNAL_ADDRESS ADDRESS=%s METHOD=DIRSERV",
+ suggestion);
+ log_addr_has_changed(LOG_NOTICE, &last_guessed_ip, &addr,
+ d_conn->base_.address);
+ ip_address_changed(0);
+ tor_addr_copy(&last_guessed_ip, &addr); /* router_rebuild_descriptor()
+ will fetch it */
+ }
+}
+
+/** Make a current best guess at our address, either because
+ * it's configured in torrc, or because we've learned it from
+ * dirserver headers. Place the answer in *<b>addr</b> and return
+ * 0 on success, else return -1 if we have no guess.
+ *
+ * If <b>cache_only</b> is true, just return any cached answers, and
+ * don't try to get any new answers.
+ */
+MOCK_IMPL(int,
+router_pick_published_address, (const or_options_t *options, uint32_t *addr,
+ int cache_only))
+{
+ /* First, check the cached output from resolve_my_address(). */
+ *addr = get_last_resolved_addr();
+ if (*addr)
+ return 0;
+
+ /* Second, consider doing a resolve attempt right here. */
+ if (!cache_only) {
+ if (resolve_my_address(LOG_INFO, options, addr, NULL, NULL) >= 0) {
+ log_info(LD_CONFIG,"Success: chose address '%s'.", fmt_addr32(*addr));
+ return 0;
+ }
+ }
+
+ /* Third, check the cached output from router_new_address_suggestion(). */
+ if (router_guess_address_from_dir_headers(addr) >= 0)
+ return 0;
+
+ /* We have no useful cached answers. Return failure. */
+ return -1;
+}
diff --git a/src/feature/relay/relay_resolve_addr.h b/src/feature/relay/relay_resolve_addr.h
new file mode 100644
index 000000000..1ead2baf7
--- /dev/null
+++ b/src/feature/relay/relay_resolve_addr.h
@@ -0,0 +1,23 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file relay_resolve_addr.h
+ * \brief Header file for relay_resolve_addr.c.
+ **/
+
+#ifndef TOR_RELAY_RESOLVE_ADDR_H
+#define TOR_RELAY_RESOLVE_ADDR_H
+
+MOCK_DECL(int, router_pick_published_address,
+ (const or_options_t *options, uint32_t *addr, int cache_only));
+
+void router_new_address_suggestion(const char *suggestion,
+ const dir_connection_t *d_conn);
+
+#ifdef RELAY_RESOLVE_ADDR_PRIVATE
+
+#endif /* RELAY_RESOLVE_ADDR_PRIVATE */
+
+#endif /* TOR_RELAY_RESOLVE_ADDR_H */
+
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index 2858371af..cbb49ede1 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -36,6 +36,7 @@
#include "feature/nodelist/torcert.h"
#include "feature/relay/dns.h"
#include "feature/relay/relay_config.h"
+#include "feature/relay/relay_resolve_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routerkeys.h"
#include "feature/relay/routermode.h"
@@ -1763,41 +1764,6 @@ router_get_descriptor_gen_reason(void)
return desc_gen_reason;
}
-static int router_guess_address_from_dir_headers(uint32_t *guess);
-
-/** Make a current best guess at our address, either because
- * it's configured in torrc, or because we've learned it from
- * dirserver headers. Place the answer in *<b>addr</b> and return
- * 0 on success, else return -1 if we have no guess.
- *
- * If <b>cache_only</b> is true, just return any cached answers, and
- * don't try to get any new answers.
- */
-MOCK_IMPL(int,
-router_pick_published_address,(const or_options_t *options, uint32_t *addr,
- int cache_only))
-{
- /* First, check the cached output from resolve_my_address(). */
- *addr = get_last_resolved_addr();
- if (*addr)
- return 0;
-
- /* Second, consider doing a resolve attempt right here. */
- if (!cache_only) {
- if (resolve_my_address(LOG_INFO, options, addr, NULL, NULL) >= 0) {
- log_info(LD_CONFIG,"Success: chose address '%s'.", fmt_addr32(*addr));
- return 0;
- }
- }
-
- /* Third, check the cached output from router_new_address_suggestion(). */
- if (router_guess_address_from_dir_headers(addr) >= 0)
- return 0;
-
- /* We have no useful cached answers. Return failure. */
- return -1;
-}
-
/* Like router_check_descriptor_address_consistency, but specifically for the
* ORPort or DirPort.
* listener_type is either CONN_TYPE_OR_LISTENER or CONN_TYPE_DIR_LISTENER. */
@@ -2523,7 +2489,7 @@ check_descriptor_bandwidth_changed(time_t now)
/** Note at log level severity that our best guess of address has changed from
* <b>prev</b> to <b>cur</b>. */
-static void
+void
log_addr_has_changed(int severity,
const tor_addr_t *prev,
const tor_addr_t *cur,
@@ -2595,86 +2561,6 @@ check_descriptor_ipaddress_changed(time_t now)
tor_free(hostname);
}
-/** The most recently guessed value of our IP address, based on directory
- * headers. */
-static tor_addr_t last_guessed_ip = TOR_ADDR_NULL;
-
-/** A directory server <b>d_conn</b> told us our IP address is
- * <b>suggestion</b>.
- * If this address is different from the one we think we are now, and
- * if our computer doesn't actually know its IP address, then switch. */
-void
-router_new_address_suggestion(const char *suggestion,
- const dir_connection_t *d_conn)
-{
- tor_addr_t addr;
- uint32_t cur = 0; /* Current IPv4 address. */
- const or_options_t *options = get_options();
-
- /* first, learn what the IP address actually is */
- if (tor_addr_parse(&addr, suggestion) == -1) {
- log_debug(LD_DIR, "Malformed X-Your-Address-Is header %s. Ignoring.",
- escaped(suggestion));
- return;
- }
-
- log_debug(LD_DIR, "Got X-Your-Address-Is: %s.", suggestion);
-
- if (!server_mode(options)) {
- tor_addr_copy(&last_guessed_ip, &addr);
- return;
- }
-
- /* XXXX ipv6 */
- cur = get_last_resolved_addr();
- if (cur ||
- resolve_my_address(LOG_INFO, options, &cur, NULL, NULL) >= 0) {
- /* We're all set -- we already know our address. Great. */
- tor_addr_from_ipv4h(&last_guessed_ip, cur); /* store it in case we
- need it later */
- return;
- }
- if (tor_addr_is_internal(&addr, 0)) {
- /* Don't believe anybody who says our IP is, say, 127.0.0.1. */
- return;
- }
- if (tor_addr_eq(&d_conn->base_.addr, &addr)) {
- /* Don't believe anybody who says our IP is their IP. */
- log_debug(LD_DIR, "A directory server told us our IP address is %s, "
- "but they are just reporting their own IP address. Ignoring.",
- suggestion);
- return;
- }
-
- /* Okay. We can't resolve our own address, and X-Your-Address-Is is giving
- * us an answer different from what we had the last time we managed to
- * resolve it. */
- if (!tor_addr_eq(&last_guessed_ip, &addr)) {
- control_event_server_status(LOG_NOTICE,
- "EXTERNAL_ADDRESS ADDRESS=%s METHOD=DIRSERV",
- suggestion);
- log_addr_has_changed(LOG_NOTICE, &last_guessed_ip, &addr,
- d_conn->base_.address);
- ip_address_changed(0);
- tor_addr_copy(&last_guessed_ip, &addr); /* router_rebuild_descriptor()
- will fetch it */
- }
-}
-
-/** We failed to resolve our address locally, but we'd like to build
- * a descriptor and publish / test reachability. If we have a guess
- * about our address based on directory headers, answer it and return
- * 0; else return -1. */
-static int
-router_guess_address_from_dir_headers(uint32_t *guess)
-{
- if (!tor_addr_is_null(&last_guessed_ip)) {
- *guess = tor_addr_to_ipv4h(&last_guessed_ip);
- return 0;
- }
- return -1;
-}
-
/** Set <b>platform</b> (max length <b>len</b>) to a NUL-terminated short
* string describing the version of Tor and the operating system we're
* currently running on.
diff --git a/src/feature/relay/router.h b/src/feature/relay/router.h
index 39c550dd2..50790a73d 100644
--- a/src/feature/relay/router.h
+++ b/src/feature/relay/router.h
@@ -87,8 +87,6 @@ void mark_my_descriptor_dirty(const char *reason);
void check_descriptor_bandwidth_changed(time_t now);
void check_descriptor_ipaddress_changed(time_t now);
int router_has_bandwidth_to_be_dirserver(const or_options_t *options);
-void router_new_address_suggestion(const char *suggestion,
- const dir_connection_t *d_conn);
int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port);
MOCK_DECL(int, router_my_exit_policy_is_reject_star,(void));
MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
@@ -100,9 +98,6 @@ int router_digest_is_me(const char *digest);
const uint8_t *router_get_my_id_digest(void);
int router_extrainfo_digest_is_me(const char *digest);
int router_is_me(const routerinfo_t *router);
-MOCK_DECL(int,router_pick_published_address,(const or_options_t *options,
- uint32_t *addr,
- int cache_only));
int router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e);
int router_rebuild_descriptor(int force);
char *router_dump_router_to_string(routerinfo_t *router,
@@ -120,6 +115,9 @@ int extrainfo_dump_to_string(char **s, extrainfo_t *extrainfo,
const char *routerinfo_err_to_string(int err);
int routerinfo_err_is_transient(int err);
+void log_addr_has_changed(int severity, const tor_addr_t *prev,
+ const tor_addr_t *cur, const char *source);
+
void router_reset_warnings(void);
void router_free_all(void);
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 9ccdbc72c..2a29d026b 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -42,6 +42,7 @@
#include "core/or/policies.h"
#include "feature/rend/rendclient.h"
#include "feature/rend/rendservice.h"
+#include "feature/relay/relay_resolve_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routermode.h"
#include "feature/nodelist/dirlist.h"
1
0
commit 2e519fbfb03e981b27d3e1309eb2681cd38f1d4c
Author: David Goulet <dgoulet(a)torproject.org>
Date: Tue May 5 13:48:32 2020 -0400
changes: File for #33789
Signed-off-by: David Goulet <dgoulet(a)torproject.org>
---
changes/ticket33789 | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/changes/ticket33789 b/changes/ticket33789
new file mode 100644
index 000000000..a7e69793e
--- /dev/null
+++ b/changes/ticket33789
@@ -0,0 +1,4 @@
+ o Code simplification and refactoring (relay address):
+ - Move a series of functions related to address resolving into their own
+ files. Closes ticket 33789.
+
1
0

[tor/master] Merge remote-tracking branch 'tor-github/pr/1880/head'
by nickm@torproject.org 07 May '20
by nickm@torproject.org 07 May '20
07 May '20
commit b7a165228f02e693b3e777b4c815214bb6e05691
Merge: 3a785dd5b c81c5a264
Author: Nick Mathewson <nickm(a)torproject.org>
Date: Thu May 7 08:19:11 2020 -0400
Merge remote-tracking branch 'tor-github/pr/1880/head'
changes/ticket33789 | 4 +
scripts/maint/practracker/exceptions.txt | 2 +-
src/app/config/config.c | 289 -----------------------------
src/app/config/config.h | 6 -
src/app/config/include.am | 2 +
src/app/config/resolve_addr.c | 308 +++++++++++++++++++++++++++++++
src/app/config/resolve_addr.h | 28 +++
src/core/mainloop/connection.c | 1 +
src/core/or/channeltls.c | 1 +
src/core/stA1RajU | 0
src/core/stiysZND | Bin 0 -> 19083264 bytes
src/feature/client/transports.c | 1 +
src/feature/control/control_getinfo.c | 1 +
src/feature/dirauth/dirauth_config.c | 1 +
src/feature/dirauth/dirvote.c | 1 +
src/feature/dircache/dircache.c | 1 +
src/feature/dirclient/dirclient.c | 1 +
src/feature/dirclient/dirclient_modes.c | 1 +
src/feature/nodelist/dirlist.c | 1 +
src/feature/relay/include.am | 2 +
src/feature/relay/relay_find_addr.c | 133 +++++++++++++
src/feature/relay/relay_find_addr.h | 23 +++
src/feature/relay/router.c | 119 +-----------
src/feature/relay/router.h | 8 +-
src/test/test_channeltls.c | 1 +
src/test/test_config.c | 2 +
26 files changed, 520 insertions(+), 417 deletions(-)
1
0
commit a25f16707296b0a25c09c09cc31387b9ef799fae
Author: David Goulet <dgoulet(a)torproject.org>
Date: Tue May 5 13:42:52 2020 -0400
config: New file resolve_addr.{c|h}
Move a series of function from config.c into that new file which is related to
address resolving.
Part of #33789
Signed-off-by: David Goulet <dgoulet(a)torproject.org>
---
scripts/maint/practracker/exceptions.txt | 2 +-
src/app/config/config.c | 289 -----------------------------
src/app/config/config.h | 6 -
src/app/config/include.am | 2 +
src/app/config/resolve_addr.c | 308 +++++++++++++++++++++++++++++++
src/app/config/resolve_addr.h | 28 +++
src/core/mainloop/connection.c | 1 +
src/core/or/channeltls.c | 1 +
src/core/stA1RajU | 0
src/core/stiysZND | Bin 0 -> 19083264 bytes
src/feature/dirauth/dirauth_config.c | 1 +
src/feature/dirauth/dirvote.c | 1 +
src/feature/dircache/dircache.c | 1 +
src/feature/nodelist/dirlist.c | 1 +
src/feature/relay/relay_resolve_addr.c | 1 +
src/feature/relay/router.c | 1 +
src/test/test_channeltls.c | 1 +
src/test/test_config.c | 1 +
18 files changed, 349 insertions(+), 296 deletions(-)
diff --git a/scripts/maint/practracker/exceptions.txt b/scripts/maint/practracker/exceptions.txt
index 8f718deff..fc9a05c84 100644
--- a/scripts/maint/practracker/exceptions.txt
+++ b/scripts/maint/practracker/exceptions.txt
@@ -36,7 +36,6 @@
problem file-size /src/app/config/config.c 7525
problem include-count /src/app/config/config.c 80
problem function-size /src/app/config/config.c:options_act() 381
-problem function-size /src/app/config/config.c:resolve_my_address() 191
problem function-size /src/app/config/config.c:options_validate_cb() 794
problem function-size /src/app/config/config.c:options_init_from_torrc() 192
problem function-size /src/app/config/config.c:options_init_from_string() 103
@@ -47,6 +46,7 @@ problem function-size /src/app/config/config.c:parse_dir_authority_line() 150
problem function-size /src/app/config/config.c:parse_dir_fallback_line() 101
problem function-size /src/app/config/config.c:port_parse_config() 435
problem function-size /src/app/config/config.c:parse_ports() 132
+problem function-size /src/app/config/resolve_addr.c:resolve_my_address() 191
problem file-size /src/app/config/or_options_st.h 1050
problem include-count /src/app/main/main.c 68
problem function-size /src/app/main/main.c:dumpstats() 102
diff --git a/src/app/config/config.c b/src/app/config/config.c
index 0ae650eb0..7ed373c54 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -2722,23 +2722,6 @@ list_enabled_modules(void)
// test variants in test_parseconf.sh to no useful purpose.
}
-/** Last value actually set by resolve_my_address. */
-static uint32_t last_resolved_addr = 0;
-
-/** Accessor for last_resolved_addr from outside this file. */
-uint32_t
-get_last_resolved_addr(void)
-{
- return last_resolved_addr;
-}
-
-/** Reset last_resolved_addr from outside this file. */
-void
-reset_last_resolved_addr(void)
-{
- last_resolved_addr = 0;
-}
-
/* Return true if <b>options</b> is using the default authorities, and false
* if any authority-related option has been overridden. */
int
@@ -2747,278 +2730,6 @@ using_default_dir_authorities(const or_options_t *options)
return (!options->DirAuthorities && !options->AlternateDirAuthority);
}
-/**
- * Attempt getting our non-local (as judged by tor_addr_is_internal()
- * function) IP address using following techniques, listed in
- * order from best (most desirable, try first) to worst (least
- * desirable, try if everything else fails).
- *
- * First, attempt using <b>options-\>Address</b> to get our
- * non-local IP address.
- *
- * If <b>options-\>Address</b> represents a non-local IP address,
- * consider it ours.
- *
- * If <b>options-\>Address</b> is a DNS name that resolves to
- * a non-local IP address, consider this IP address ours.
- *
- * If <b>options-\>Address</b> is NULL, fall back to getting local
- * hostname and using it in above-described ways to try and
- * get our IP address.
- *
- * In case local hostname cannot be resolved to a non-local IP
- * address, try getting an IP address of network interface
- * in hopes it will be non-local one.
- *
- * Fail if one or more of the following is true:
- * - DNS name in <b>options-\>Address</b> cannot be resolved.
- * - <b>options-\>Address</b> is a local host address.
- * - Attempt at getting local hostname fails.
- * - Attempt at getting network interface address fails.
- *
- * Return 0 if all is well, or -1 if we can't find a suitable
- * public IP address.
- *
- * If we are returning 0:
- * - Put our public IP address (in host order) into *<b>addr_out</b>.
- * - If <b>method_out</b> is non-NULL, set *<b>method_out</b> to a static
- * string describing how we arrived at our answer.
- * - "CONFIGURED" - parsed from IP address string in
- * <b>options-\>Address</b>
- * - "RESOLVED" - resolved from DNS name in <b>options-\>Address</b>
- * - "GETHOSTNAME" - resolved from a local hostname.
- * - "INTERFACE" - retrieved from a network interface.
- * - If <b>hostname_out</b> is non-NULL, and we resolved a hostname to
- * get our address, set *<b>hostname_out</b> to a newly allocated string
- * holding that hostname. (If we didn't get our address by resolving a
- * hostname, set *<b>hostname_out</b> to NULL.)
- *
- * XXXX ipv6
- */
-int
-resolve_my_address(int warn_severity, const or_options_t *options,
- uint32_t *addr_out,
- const char **method_out, char **hostname_out)
-{
- struct in_addr in;
- uint32_t addr; /* host order */
- char hostname[256];
- const char *method_used;
- const char *hostname_used;
- int explicit_ip=1;
- int explicit_hostname=1;
- int from_interface=0;
- char *addr_string = NULL;
- const char *address = options->Address;
- int notice_severity = warn_severity <= LOG_NOTICE ?
- LOG_NOTICE : warn_severity;
-
- tor_addr_t myaddr;
- tor_assert(addr_out);
-
- /*
- * Step one: Fill in 'hostname' to be our best guess.
- */
-
- if (address && *address) {
- strlcpy(hostname, address, sizeof(hostname));
- } else { /* then we need to guess our address */
- explicit_ip = 0; /* it's implicit */
- explicit_hostname = 0; /* it's implicit */
-
- if (tor_gethostname(hostname, sizeof(hostname)) < 0) {
- log_fn(warn_severity, LD_NET,"Error obtaining local hostname");
- return -1;
- }
- log_debug(LD_CONFIG, "Guessed local host name as '%s'", hostname);
- }
-
- /*
- * Step two: Now that we know 'hostname', parse it or resolve it. If
- * it doesn't parse or resolve, look at the interface address. Set 'addr'
- * to be our (host-order) 32-bit answer.
- */
-
- if (tor_inet_aton(hostname, &in) == 0) {
- /* then we have to resolve it */
- explicit_ip = 0;
- if (tor_lookup_hostname(hostname, &addr)) { /* failed to resolve */
- uint32_t interface_ip; /* host order */
-
- if (explicit_hostname) {
- log_fn(warn_severity, LD_CONFIG,
- "Could not resolve local Address '%s'. Failing.", hostname);
- return -1;
- }
- log_fn(notice_severity, LD_CONFIG,
- "Could not resolve guessed local hostname '%s'. "
- "Trying something else.", hostname);
- if (get_interface_address(warn_severity, &interface_ip)) {
- log_fn(warn_severity, LD_CONFIG,
- "Could not get local interface IP address. Failing.");
- return -1;
- }
- from_interface = 1;
- addr = interface_ip;
- log_fn(notice_severity, LD_CONFIG, "Learned IP address '%s' for "
- "local interface. Using that.", fmt_addr32(addr));
- strlcpy(hostname, "<guessed from interfaces>", sizeof(hostname));
- } else { /* resolved hostname into addr */
- tor_addr_from_ipv4h(&myaddr, addr);
-
- if (!explicit_hostname &&
- tor_addr_is_internal(&myaddr, 0)) {
- tor_addr_t interface_ip;
-
- log_fn(notice_severity, LD_CONFIG, "Guessed local hostname '%s' "
- "resolves to a private IP address (%s). Trying something "
- "else.", hostname, fmt_addr32(addr));
-
- if (get_interface_address6(warn_severity, AF_INET, &interface_ip)<0) {
- log_fn(warn_severity, LD_CONFIG,
- "Could not get local interface IP address. Too bad.");
- } else if (tor_addr_is_internal(&interface_ip, 0)) {
- log_fn(notice_severity, LD_CONFIG,
- "Interface IP address '%s' is a private address too. "
- "Ignoring.", fmt_addr(&interface_ip));
- } else {
- from_interface = 1;
- addr = tor_addr_to_ipv4h(&interface_ip);
- log_fn(notice_severity, LD_CONFIG,
- "Learned IP address '%s' for local interface."
- " Using that.", fmt_addr32(addr));
- strlcpy(hostname, "<guessed from interfaces>", sizeof(hostname));
- }
- }
- }
- } else {
- addr = ntohl(in.s_addr); /* set addr so that addr_string is not
- * illformed */
- }
-
- /*
- * Step three: Check whether 'addr' is an internal IP address, and error
- * out if it is and we don't want that.
- */
-
- tor_addr_from_ipv4h(&myaddr,addr);
-
- addr_string = tor_dup_ip(addr);
- if (tor_addr_is_internal(&myaddr, 0)) {
- /* make sure we're ok with publishing an internal IP */
- if (using_default_dir_authorities(options)) {
- /* if they are using the default authorities, disallow internal IPs
- * always. For IPv6 ORPorts, this check is done in
- * router_get_advertised_ipv6_or_ap(). See #33681. */
- log_fn(warn_severity, LD_CONFIG,
- "Address '%s' resolves to private IP address '%s'. "
- "Tor servers that use the default DirAuthorities must have "
- "public IP addresses.", hostname, addr_string);
- tor_free(addr_string);
- return -1;
- }
- if (!explicit_ip) {
- /* even if they've set their own authorities, require an explicit IP if
- * they're using an internal address. */
- log_fn(warn_severity, LD_CONFIG, "Address '%s' resolves to private "
- "IP address '%s'. Please set the Address config option to be "
- "the IP address you want to use.", hostname, addr_string);
- tor_free(addr_string);
- return -1;
- }
- }
-
- /*
- * Step four: We have a winner! 'addr' is our answer for sure, and
- * 'addr_string' is its string form. Fill out the various fields to
- * say how we decided it.
- */
-
- log_debug(LD_CONFIG, "Resolved Address to '%s'.", addr_string);
-
- if (explicit_ip) {
- method_used = "CONFIGURED";
- hostname_used = NULL;
- } else if (explicit_hostname) {
- method_used = "RESOLVED";
- hostname_used = hostname;
- } else if (from_interface) {
- method_used = "INTERFACE";
- hostname_used = NULL;
- } else {
- method_used = "GETHOSTNAME";
- hostname_used = hostname;
- }
-
- *addr_out = addr;
- if (method_out)
- *method_out = method_used;
- if (hostname_out)
- *hostname_out = hostname_used ? tor_strdup(hostname_used) : NULL;
-
- /*
- * Step five: Check if the answer has changed since last time (or if
- * there was no last time), and if so call various functions to keep
- * us up-to-date.
- */
-
- if (last_resolved_addr && last_resolved_addr != *addr_out) {
- /* Leave this as a notice, regardless of the requested severity,
- * at least until dynamic IP address support becomes bulletproof. */
- log_notice(LD_NET,
- "Your IP address seems to have changed to %s "
- "(METHOD=%s%s%s). Updating.",
- addr_string, method_used,
- hostname_used ? " HOSTNAME=" : "",
- hostname_used ? hostname_used : "");
- ip_address_changed(0);
- }
-
- if (last_resolved_addr != *addr_out) {
- control_event_server_status(LOG_NOTICE,
- "EXTERNAL_ADDRESS ADDRESS=%s METHOD=%s%s%s",
- addr_string, method_used,
- hostname_used ? " HOSTNAME=" : "",
- hostname_used ? hostname_used : "");
- }
- last_resolved_addr = *addr_out;
-
- /*
- * And finally, clean up and return success.
- */
-
- tor_free(addr_string);
- return 0;
-}
-
-/** Return true iff <b>addr</b> is judged to be on the same network as us, or
- * on a private network.
- */
-MOCK_IMPL(int,
-is_local_addr, (const tor_addr_t *addr))
-{
- if (tor_addr_is_internal(addr, 0))
- return 1;
- /* Check whether ip is on the same /24 as we are. */
- if (get_options()->EnforceDistinctSubnets == 0)
- return 0;
- if (tor_addr_family(addr) == AF_INET) {
- uint32_t ip = tor_addr_to_ipv4h(addr);
-
- /* It's possible that this next check will hit before the first time
- * resolve_my_address actually succeeds. (For clients, it is likely that
- * resolve_my_address will never be called at all). In those cases,
- * last_resolved_addr will be 0, and so checking to see whether ip is on
- * the same /24 as last_resolved_addr will be the same as checking whether
- * it was on net 0, which is already done by tor_addr_is_internal.
- */
- if ((last_resolved_addr & (uint32_t)0xffffff00ul)
- == (ip & (uint32_t)0xffffff00ul))
- return 1;
- }
- return 0;
-}
-
/** Return a new empty or_options_t. Used for testing. */
or_options_t *
options_new(void)
diff --git a/src/app/config/config.h b/src/app/config/config.h
index 460b5ef0e..17caa0e3f 100644
--- a/src/app/config/config.h
+++ b/src/app/config/config.h
@@ -55,12 +55,6 @@ typedef enum setopt_err_t {
setopt_err_t options_trial_assign(struct config_line_t *list, unsigned flags,
char **msg);
-uint32_t get_last_resolved_addr(void);
-void reset_last_resolved_addr(void);
-int resolve_my_address(int warn_severity, const or_options_t *options,
- uint32_t *addr_out,
- const char **method_out, char **hostname_out);
-MOCK_DECL(int, is_local_addr, (const tor_addr_t *addr));
void options_init(or_options_t *options);
#define OPTIONS_DUMP_MINIMAL 1
diff --git a/src/app/config/include.am b/src/app/config/include.am
index 5d625efec..14320a6b1 100644
--- a/src/app/config/include.am
+++ b/src/app/config/include.am
@@ -3,6 +3,7 @@
LIBTOR_APP_A_SOURCES += \
src/app/config/config.c \
src/app/config/quiet_level.c \
+ src/app/config/resolve_addr.c \
src/app/config/statefile.c
# ADD_C_FILE: INSERT HEADERS HERE.
@@ -11,6 +12,7 @@ noinst_HEADERS += \
src/app/config/or_options_st.h \
src/app/config/or_state_st.h \
src/app/config/quiet_level.h \
+ src/app/config/resolve_addr.h \
src/app/config/statefile.h \
src/app/config/tor_cmdline_mode.h
diff --git a/src/app/config/resolve_addr.c b/src/app/config/resolve_addr.c
new file mode 100644
index 000000000..b551615c0
--- /dev/null
+++ b/src/app/config/resolve_addr.c
@@ -0,0 +1,308 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file resolve_addr.c
+ * \brief Implement resolving address functions
+ **/
+
+#define RESOLVE_ADDR_PRIVATE
+
+#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
+
+#include "core/mainloop/mainloop.h"
+
+#include "feature/control/control_events.h"
+
+#include "lib/net/gethostname.h"
+#include "lib/net/resolve.h"
+
+/** Last value actually set by resolve_my_address. */
+static uint32_t last_resolved_addr = 0;
+
+/** Accessor for last_resolved_addr from outside this file. */
+uint32_t
+get_last_resolved_addr(void)
+{
+ return last_resolved_addr;
+}
+
+/** Reset last_resolved_addr from outside this file. */
+void
+reset_last_resolved_addr(void)
+{
+ last_resolved_addr = 0;
+}
+
+/**
+ * Attempt getting our non-local (as judged by tor_addr_is_internal()
+ * function) IP address using following techniques, listed in
+ * order from best (most desirable, try first) to worst (least
+ * desirable, try if everything else fails).
+ *
+ * First, attempt using <b>options-\>Address</b> to get our
+ * non-local IP address.
+ *
+ * If <b>options-\>Address</b> represents a non-local IP address,
+ * consider it ours.
+ *
+ * If <b>options-\>Address</b> is a DNS name that resolves to
+ * a non-local IP address, consider this IP address ours.
+ *
+ * If <b>options-\>Address</b> is NULL, fall back to getting local
+ * hostname and using it in above-described ways to try and
+ * get our IP address.
+ *
+ * In case local hostname cannot be resolved to a non-local IP
+ * address, try getting an IP address of network interface
+ * in hopes it will be non-local one.
+ *
+ * Fail if one or more of the following is true:
+ * - DNS name in <b>options-\>Address</b> cannot be resolved.
+ * - <b>options-\>Address</b> is a local host address.
+ * - Attempt at getting local hostname fails.
+ * - Attempt at getting network interface address fails.
+ *
+ * Return 0 if all is well, or -1 if we can't find a suitable
+ * public IP address.
+ *
+ * If we are returning 0:
+ * - Put our public IP address (in host order) into *<b>addr_out</b>.
+ * - If <b>method_out</b> is non-NULL, set *<b>method_out</b> to a static
+ * string describing how we arrived at our answer.
+ * - "CONFIGURED" - parsed from IP address string in
+ * <b>options-\>Address</b>
+ * - "RESOLVED" - resolved from DNS name in <b>options-\>Address</b>
+ * - "GETHOSTNAME" - resolved from a local hostname.
+ * - "INTERFACE" - retrieved from a network interface.
+ * - If <b>hostname_out</b> is non-NULL, and we resolved a hostname to
+ * get our address, set *<b>hostname_out</b> to a newly allocated string
+ * holding that hostname. (If we didn't get our address by resolving a
+ * hostname, set *<b>hostname_out</b> to NULL.)
+ *
+ * XXXX ipv6
+ */
+int
+resolve_my_address(int warn_severity, const or_options_t *options,
+ uint32_t *addr_out,
+ const char **method_out, char **hostname_out)
+{
+ struct in_addr in;
+ uint32_t addr; /* host order */
+ char hostname[256];
+ const char *method_used;
+ const char *hostname_used;
+ int explicit_ip=1;
+ int explicit_hostname=1;
+ int from_interface=0;
+ char *addr_string = NULL;
+ const char *address = options->Address;
+ int notice_severity = warn_severity <= LOG_NOTICE ?
+ LOG_NOTICE : warn_severity;
+
+ tor_addr_t myaddr;
+ tor_assert(addr_out);
+
+ /*
+ * Step one: Fill in 'hostname' to be our best guess.
+ */
+
+ if (address && *address) {
+ strlcpy(hostname, address, sizeof(hostname));
+ } else { /* then we need to guess our address */
+ explicit_ip = 0; /* it's implicit */
+ explicit_hostname = 0; /* it's implicit */
+
+ if (tor_gethostname(hostname, sizeof(hostname)) < 0) {
+ log_fn(warn_severity, LD_NET,"Error obtaining local hostname");
+ return -1;
+ }
+ log_debug(LD_CONFIG, "Guessed local host name as '%s'", hostname);
+ }
+
+ /*
+ * Step two: Now that we know 'hostname', parse it or resolve it. If
+ * it doesn't parse or resolve, look at the interface address. Set 'addr'
+ * to be our (host-order) 32-bit answer.
+ */
+
+ if (tor_inet_aton(hostname, &in) == 0) {
+ /* then we have to resolve it */
+ explicit_ip = 0;
+ if (tor_lookup_hostname(hostname, &addr)) { /* failed to resolve */
+ uint32_t interface_ip; /* host order */
+
+ if (explicit_hostname) {
+ log_fn(warn_severity, LD_CONFIG,
+ "Could not resolve local Address '%s'. Failing.", hostname);
+ return -1;
+ }
+ log_fn(notice_severity, LD_CONFIG,
+ "Could not resolve guessed local hostname '%s'. "
+ "Trying something else.", hostname);
+ if (get_interface_address(warn_severity, &interface_ip)) {
+ log_fn(warn_severity, LD_CONFIG,
+ "Could not get local interface IP address. Failing.");
+ return -1;
+ }
+ from_interface = 1;
+ addr = interface_ip;
+ log_fn(notice_severity, LD_CONFIG, "Learned IP address '%s' for "
+ "local interface. Using that.", fmt_addr32(addr));
+ strlcpy(hostname, "<guessed from interfaces>", sizeof(hostname));
+ } else { /* resolved hostname into addr */
+ tor_addr_from_ipv4h(&myaddr, addr);
+
+ if (!explicit_hostname &&
+ tor_addr_is_internal(&myaddr, 0)) {
+ tor_addr_t interface_ip;
+
+ log_fn(notice_severity, LD_CONFIG, "Guessed local hostname '%s' "
+ "resolves to a private IP address (%s). Trying something "
+ "else.", hostname, fmt_addr32(addr));
+
+ if (get_interface_address6(warn_severity, AF_INET, &interface_ip)<0) {
+ log_fn(warn_severity, LD_CONFIG,
+ "Could not get local interface IP address. Too bad.");
+ } else if (tor_addr_is_internal(&interface_ip, 0)) {
+ log_fn(notice_severity, LD_CONFIG,
+ "Interface IP address '%s' is a private address too. "
+ "Ignoring.", fmt_addr(&interface_ip));
+ } else {
+ from_interface = 1;
+ addr = tor_addr_to_ipv4h(&interface_ip);
+ log_fn(notice_severity, LD_CONFIG,
+ "Learned IP address '%s' for local interface."
+ " Using that.", fmt_addr32(addr));
+ strlcpy(hostname, "<guessed from interfaces>", sizeof(hostname));
+ }
+ }
+ }
+ } else {
+ addr = ntohl(in.s_addr); /* set addr so that addr_string is not
+ * illformed */
+ }
+
+ /*
+ * Step three: Check whether 'addr' is an internal IP address, and error
+ * out if it is and we don't want that.
+ */
+
+ tor_addr_from_ipv4h(&myaddr,addr);
+
+ addr_string = tor_dup_ip(addr);
+ if (tor_addr_is_internal(&myaddr, 0)) {
+ /* make sure we're ok with publishing an internal IP */
+ if (using_default_dir_authorities(options)) {
+ /* if they are using the default authorities, disallow internal IPs
+ * always. For IPv6 ORPorts, this check is done in
+ * router_get_advertised_ipv6_or_ap(). See #33681. */
+ log_fn(warn_severity, LD_CONFIG,
+ "Address '%s' resolves to private IP address '%s'. "
+ "Tor servers that use the default DirAuthorities must have "
+ "public IP addresses.", hostname, addr_string);
+ tor_free(addr_string);
+ return -1;
+ }
+ if (!explicit_ip) {
+ /* even if they've set their own authorities, require an explicit IP if
+ * they're using an internal address. */
+ log_fn(warn_severity, LD_CONFIG, "Address '%s' resolves to private "
+ "IP address '%s'. Please set the Address config option to be "
+ "the IP address you want to use.", hostname, addr_string);
+ tor_free(addr_string);
+ return -1;
+ }
+ }
+
+ /*
+ * Step four: We have a winner! 'addr' is our answer for sure, and
+ * 'addr_string' is its string form. Fill out the various fields to
+ * say how we decided it.
+ */
+
+ log_debug(LD_CONFIG, "Resolved Address to '%s'.", addr_string);
+
+ if (explicit_ip) {
+ method_used = "CONFIGURED";
+ hostname_used = NULL;
+ } else if (explicit_hostname) {
+ method_used = "RESOLVED";
+ hostname_used = hostname;
+ } else if (from_interface) {
+ method_used = "INTERFACE";
+ hostname_used = NULL;
+ } else {
+ method_used = "GETHOSTNAME";
+ hostname_used = hostname;
+ }
+
+ *addr_out = addr;
+ if (method_out)
+ *method_out = method_used;
+ if (hostname_out)
+ *hostname_out = hostname_used ? tor_strdup(hostname_used) : NULL;
+
+ /*
+ * Step five: Check if the answer has changed since last time (or if
+ * there was no last time), and if so call various functions to keep
+ * us up-to-date.
+ */
+
+ if (last_resolved_addr && last_resolved_addr != *addr_out) {
+ /* Leave this as a notice, regardless of the requested severity,
+ * at least until dynamic IP address support becomes bulletproof. */
+ log_notice(LD_NET,
+ "Your IP address seems to have changed to %s "
+ "(METHOD=%s%s%s). Updating.",
+ addr_string, method_used,
+ hostname_used ? " HOSTNAME=" : "",
+ hostname_used ? hostname_used : "");
+ ip_address_changed(0);
+ }
+
+ if (last_resolved_addr != *addr_out) {
+ control_event_server_status(LOG_NOTICE,
+ "EXTERNAL_ADDRESS ADDRESS=%s METHOD=%s%s%s",
+ addr_string, method_used,
+ hostname_used ? " HOSTNAME=" : "",
+ hostname_used ? hostname_used : "");
+ }
+ last_resolved_addr = *addr_out;
+
+ /*
+ * And finally, clean up and return success.
+ */
+
+ tor_free(addr_string);
+ return 0;
+}
+
+/** Return true iff <b>addr</b> is judged to be on the same network as us, or
+ * on a private network.
+ */
+MOCK_IMPL(int,
+is_local_addr, (const tor_addr_t *addr))
+{
+ if (tor_addr_is_internal(addr, 0))
+ return 1;
+ /* Check whether ip is on the same /24 as we are. */
+ if (get_options()->EnforceDistinctSubnets == 0)
+ return 0;
+ if (tor_addr_family(addr) == AF_INET) {
+ uint32_t ip = tor_addr_to_ipv4h(addr);
+
+ /* It's possible that this next check will hit before the first time
+ * resolve_my_address actually succeeds. (For clients, it is likely that
+ * resolve_my_address will never be called at all). In those cases,
+ * last_resolved_addr will be 0, and so checking to see whether ip is on
+ * the same /24 as last_resolved_addr will be the same as checking whether
+ * it was on net 0, which is already done by tor_addr_is_internal.
+ */
+ if ((last_resolved_addr & (uint32_t)0xffffff00ul)
+ == (ip & (uint32_t)0xffffff00ul))
+ return 1;
+ }
+ return 0;
+}
diff --git a/src/app/config/resolve_addr.h b/src/app/config/resolve_addr.h
new file mode 100644
index 000000000..374754640
--- /dev/null
+++ b/src/app/config/resolve_addr.h
@@ -0,0 +1,28 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file resolve_addr.h
+ * \brief Header file for resolve_addr.c.
+ **/
+
+#ifndef TOR_CONFIG_RESOLVE_ADDR_H
+#define TOR_CONFIG_RESOLVE_ADDR_H
+
+#include "app/config/or_options_st.h"
+
+int resolve_my_address(int warn_severity, const or_options_t *options,
+ uint32_t *addr_out,
+ const char **method_out, char **hostname_out);
+
+uint32_t get_last_resolved_addr(void);
+void reset_last_resolved_addr(void);
+
+MOCK_DECL(int, is_local_addr, (const tor_addr_t *addr));
+
+#ifdef RESOLVE_ADDR_PRIVATE
+
+#endif /* RESOLVE_ADDR_PRIVATE */
+
+#endif /* TOR_CONFIG_RESOLVE_ADDR_H */
+
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c
index db59e6b28..a8417e46d 100644
--- a/src/core/mainloop/connection.c
+++ b/src/core/mainloop/connection.c
@@ -67,6 +67,7 @@
*/
#define CHANNEL_OBJECT_PRIVATE
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "core/mainloop/connection.h"
#include "core/mainloop/mainloop.h"
#include "core/mainloop/netstatus.h"
diff --git a/src/core/or/channeltls.c b/src/core/or/channeltls.c
index 484727268..59cec5ead 100644
--- a/src/core/or/channeltls.c
+++ b/src/core/or/channeltls.c
@@ -45,6 +45,7 @@
#include "core/or/circuitmux_ewma.h"
#include "core/or/command.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "core/mainloop/connection.h"
#include "core/or/connection_or.h"
#include "feature/relay/relay_handshake.h"
diff --git a/src/core/stA1RajU b/src/core/stA1RajU
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/core/stiysZND b/src/core/stiysZND
new file mode 100644
index 000000000..faa365b76
Binary files /dev/null and b/src/core/stiysZND differ
diff --git a/src/feature/dirauth/dirauth_config.c b/src/feature/dirauth/dirauth_config.c
index 38d2a8bc5..a0b6de7ec 100644
--- a/src/feature/dirauth/dirauth_config.c
+++ b/src/feature/dirauth/dirauth_config.c
@@ -20,6 +20,7 @@
/* Required for dirinfo_type_t in or_options_t */
#include "core/or/or.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "feature/dirauth/voting_schedule.h"
#include "feature/stats/rephist.h"
diff --git a/src/feature/dirauth/dirvote.c b/src/feature/dirauth/dirvote.c
index 7eb2b720a..6bf30d083 100644
--- a/src/feature/dirauth/dirvote.c
+++ b/src/feature/dirauth/dirvote.c
@@ -6,6 +6,7 @@
#define DIRVOTE_PRIVATE
#include "core/or/or.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "core/or/policies.h"
#include "core/or/protover.h"
#include "core/or/tor_version_st.h"
diff --git a/src/feature/dircache/dircache.c b/src/feature/dircache/dircache.c
index 4f7f20920..ca127720f 100644
--- a/src/feature/dircache/dircache.c
+++ b/src/feature/dircache/dircache.c
@@ -13,6 +13,7 @@
#include "core/or/or.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "core/mainloop/connection.h"
#include "core/or/relay.h"
#include "feature/dirauth/dirvote.h"
diff --git a/src/feature/nodelist/dirlist.c b/src/feature/nodelist/dirlist.c
index ad3af0a14..d7069bb0e 100644
--- a/src/feature/nodelist/dirlist.c
+++ b/src/feature/nodelist/dirlist.c
@@ -27,6 +27,7 @@
#include "core/or/or.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "core/or/policies.h"
#include "feature/control/control_events.h"
#include "feature/dirauth/authmode.h"
diff --git a/src/feature/relay/relay_resolve_addr.c b/src/feature/relay/relay_resolve_addr.c
index 7d83d870c..c929219d4 100644
--- a/src/feature/relay/relay_resolve_addr.c
+++ b/src/feature/relay/relay_resolve_addr.c
@@ -9,6 +9,7 @@
#include "core/or/or.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "core/mainloop/mainloop.h"
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index cbb49ede1..e20e7709e 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -8,6 +8,7 @@
#include "core/or/or.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "app/config/statefile.h"
#include "app/main/main.h"
#include "core/mainloop/connection.h"
diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c
index 94ce56f2b..f4f5cb447 100644
--- a/src/test/test_channeltls.c
+++ b/src/test/test_channeltls.c
@@ -14,6 +14,7 @@
#include "core/mainloop/connection.h"
#include "core/or/connection_or.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
/* For init/free stuff */
#include "core/or/scheduler.h"
#include "lib/tls/tortls.h"
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 2a29d026b..5e57aab52 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -18,6 +18,7 @@
#include "core/or/circuitmux_ewma.h"
#include "core/or/circuitbuild.h"
#include "app/config/config.h"
+#include "app/config/resolve_addr.h"
#include "feature/relay/relay_config.h"
#include "feature/relay/transport_config.h"
#include "lib/confmgt/confmgt.h"
1
0

07 May '20
commit c81c5a2646763c651a9bc17b6213bd25a480eca9
Author: David Goulet <dgoulet(a)torproject.org>
Date: Tue May 5 15:34:58 2020 -0400
relay: Rename relay_resolve_addr.{c|h} file
New name is more accurate semantically.
Closes #33789
Signed-off-by: David Goulet <dgoulet(a)torproject.org>
---
src/feature/client/transports.c | 2 +-
src/feature/control/control_getinfo.c | 2 +-
src/feature/dirclient/dirclient.c | 2 +-
src/feature/dirclient/dirclient_modes.c | 2 +-
src/feature/relay/include.am | 4 ++--
.../relay/{relay_resolve_addr.c => relay_find_addr.c} | 6 +++---
.../relay/{relay_resolve_addr.h => relay_find_addr.h} | 14 +++++++-------
src/feature/relay/router.c | 2 +-
src/test/test_config.c | 2 +-
9 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/src/feature/client/transports.c b/src/feature/client/transports.c
index b2a39c678..2bdc0ae15 100644
--- a/src/feature/client/transports.c
+++ b/src/feature/client/transports.c
@@ -97,7 +97,7 @@
#include "core/or/circuitbuild.h"
#include "feature/client/transports.h"
#include "feature/relay/router.h"
-#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/relay_find_addr.h"
/* 31851: split the server transport code out of the client module */
#include "feature/relay/transport_config.h"
#include "app/config/statefile.h"
diff --git a/src/feature/control/control_getinfo.c b/src/feature/control/control_getinfo.c
index 673920c9b..685deb8ec 100644
--- a/src/feature/control/control_getinfo.c
+++ b/src/feature/control/control_getinfo.c
@@ -44,7 +44,7 @@
#include "feature/nodelist/nodelist.h"
#include "feature/nodelist/routerinfo.h"
#include "feature/nodelist/routerlist.h"
-#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/relay_find_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routermode.h"
#include "feature/relay/selftest.h"
diff --git a/src/feature/dirclient/dirclient.c b/src/feature/dirclient/dirclient.c
index c80a6606a..f590c1594 100644
--- a/src/feature/dirclient/dirclient.c
+++ b/src/feature/dirclient/dirclient.c
@@ -44,7 +44,7 @@
#include "feature/nodelist/routerinfo.h"
#include "feature/nodelist/routerlist.h"
#include "feature/nodelist/routerset.h"
-#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/relay_find_addr.h"
#include "feature/relay/routermode.h"
#include "feature/relay/selftest.h"
#include "feature/rend/rendcache.h"
diff --git a/src/feature/dirclient/dirclient_modes.c b/src/feature/dirclient/dirclient_modes.c
index b385a6e86..31a3f8af5 100644
--- a/src/feature/dirclient/dirclient_modes.c
+++ b/src/feature/dirclient/dirclient_modes.c
@@ -16,7 +16,7 @@
#include "feature/dirclient/dirclient_modes.h"
#include "feature/dircache/dirserv.h"
-#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/relay_find_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routermode.h"
#include "feature/stats/predict_ports.h"
diff --git a/src/feature/relay/include.am b/src/feature/relay/include.am
index 2aa298560..84bb1ff35 100644
--- a/src/feature/relay/include.am
+++ b/src/feature/relay/include.am
@@ -2,7 +2,7 @@
# Legacy shared relay code: migrate to the relay module over time
LIBTOR_APP_A_SOURCES += \
src/feature/relay/onion_queue.c \
- src/feature/relay/relay_resolve_addr.c \
+ src/feature/relay/relay_find_addr.c \
src/feature/relay/router.c
# The Relay module.
@@ -32,7 +32,7 @@ noinst_HEADERS += \
src/feature/relay/relay_handshake.h \
src/feature/relay/relay_periodic.h \
src/feature/relay/relay_sys.h \
- src/feature/relay/relay_resolve_addr.h \
+ src/feature/relay/relay_find_addr.h \
src/feature/relay/router.h \
src/feature/relay/routerkeys.h \
src/feature/relay/routermode.h \
diff --git a/src/feature/relay/relay_resolve_addr.c b/src/feature/relay/relay_find_addr.c
similarity index 97%
rename from src/feature/relay/relay_resolve_addr.c
rename to src/feature/relay/relay_find_addr.c
index c929219d4..86cd799d4 100644
--- a/src/feature/relay/relay_resolve_addr.c
+++ b/src/feature/relay/relay_find_addr.c
@@ -2,8 +2,8 @@
/* See LICENSE for licensing information */
/**
- * \file relay_resolve_addr.c
- * \brief Implement relay resolving address mechanism.
+ * \file relay_find_addr.c
+ * \brief Implement mechanism for a relay to find its address.
**/
#include "core/or/or.h"
@@ -15,7 +15,7 @@
#include "feature/control/control_events.h"
#include "feature/dircommon/dir_connection_st.h"
-#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/relay_find_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routermode.h"
diff --git a/src/feature/relay/relay_resolve_addr.h b/src/feature/relay/relay_find_addr.h
similarity index 58%
rename from src/feature/relay/relay_resolve_addr.h
rename to src/feature/relay/relay_find_addr.h
index 1ead2baf7..ac51a977e 100644
--- a/src/feature/relay/relay_resolve_addr.h
+++ b/src/feature/relay/relay_find_addr.h
@@ -2,12 +2,12 @@
/* See LICENSE for licensing information */
/**
- * \file relay_resolve_addr.h
- * \brief Header file for relay_resolve_addr.c.
+ * \file relay_find_addr.h
+ * \brief Header file for relay_find_addr.c.
**/
-#ifndef TOR_RELAY_RESOLVE_ADDR_H
-#define TOR_RELAY_RESOLVE_ADDR_H
+#ifndef TOR_RELAY_FIND_ADDR_H
+#define TOR_RELAY_FIND_ADDR_H
MOCK_DECL(int, router_pick_published_address,
(const or_options_t *options, uint32_t *addr, int cache_only));
@@ -15,9 +15,9 @@ MOCK_DECL(int, router_pick_published_address,
void router_new_address_suggestion(const char *suggestion,
const dir_connection_t *d_conn);
-#ifdef RELAY_RESOLVE_ADDR_PRIVATE
+#ifdef RELAY_FIND_ADDR_PRIVATE
-#endif /* RELAY_RESOLVE_ADDR_PRIVATE */
+#endif /* RELAY_FIND_ADDR_PRIVATE */
-#endif /* TOR_RELAY_RESOLVE_ADDR_H */
+#endif /* TOR_RELAY_FIND_ADDR_H */
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index e20e7709e..267dee848 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -37,7 +37,7 @@
#include "feature/nodelist/torcert.h"
#include "feature/relay/dns.h"
#include "feature/relay/relay_config.h"
-#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/relay_find_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routerkeys.h"
#include "feature/relay/routermode.h"
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 5e57aab52..095eb24c4 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -43,7 +43,7 @@
#include "core/or/policies.h"
#include "feature/rend/rendclient.h"
#include "feature/rend/rendservice.h"
-#include "feature/relay/relay_resolve_addr.h"
+#include "feature/relay/relay_find_addr.h"
#include "feature/relay/router.h"
#include "feature/relay/routermode.h"
#include "feature/nodelist/dirlist.h"
1
0

[translation/snowflakeaddon-messages.json_completed] https://gitweb.torproject.org/translation.git/commit/?h=snowflakeaddon-messages.json_completed
by translation@torproject.org 07 May '20
by translation@torproject.org 07 May '20
07 May '20
commit 7578a34536a405dfce3b0389be29faa135a0f0b3
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu May 7 10:51:23 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=snowflakeaddon-mess…
---
bn_BD/messages.json | 6 ++++++
ca/messages.json | 6 ++++++
da/messages.json | 6 ++++++
de/messages.json | 6 ++++++
en/messages.json | 6 ++++++
es_ES/messages.json | 6 ++++++
fr/messages.json | 6 ++++++
he/messages.json | 6 ++++++
hr/messages.json | 6 ++++++
it/messages.json | 6 ++++++
lt/messages.json | 6 ++++++
messages.json | 6 ++++++
pt_BR/messages.json | 6 ++++++
pt_PT/messages.json | 6 ++++++
ru/messages.json | 6 ++++++
sv_SE/messages.json | 6 ++++++
tr/messages.json | 6 ++++++
zh_CN/messages.json | 6 ++++++
zh_TW/messages.json | 6 ++++++
19 files changed, 114 insertions(+)
diff --git a/bn_BD/messages.json b/bn_BD/messages.json
index 3df4ce1166..618ff5dc8b 100644
--- a/bn_BD/messages.json
+++ b/bn_BD/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "বিগত ২৪ ঘন্টায় আপনার Snowflake ব্যাবহারকারিদের সেন্সর থেকে দূরে রাখতে সহায়তাকারীর সংখ্যা : $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "কুকিজ সক্রিয় নয়।"
},
diff --git a/ca/messages.json b/ca/messages.json
index d0f4311aed..5b71fee05c 100644
--- a/ca/messages.json
+++ b/ca/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Nombre d'usuaris que el vostre Snowflake ha ajudat a eludir la censura en les últimes 24 hores: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Les galetes no estan activades."
},
diff --git a/da/messages.json b/da/messages.json
index 5924bc8763..105cf05794 100644
--- a/da/messages.json
+++ b/da/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Antal brugere som din Snowflake har hjulpet med at omgå censur indenfor de sidste 24 timer: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies er ikke aktiveret."
},
diff --git a/de/messages.json b/de/messages.json
index ab6dd64b0b..593840ffc5 100644
--- a/de/messages.json
+++ b/de/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Anzahl der Benutzer, denen dein Snowflake in den letzten 24 Stunden geholfen hat, die Zensur zu umgehen: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies sind nicht aktiviert."
},
diff --git a/en/messages.json b/en/messages.json
index 0d638c7d48..393a1c46fc 100644
--- a/en/messages.json
+++ b/en/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/es_ES/messages.json b/es_ES/messages.json
index 348d0421bc..0f4f799fcd 100644
--- a/es_ES/messages.json
+++ b/es_ES/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Número de usuarios que tu Snowflake ha ayudado a sortear la censura en las últimas 24 horas: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Las cookies no están habilitadas."
},
diff --git a/fr/messages.json b/fr/messages.json
index 9129dd008a..07f4b36f8e 100644
--- a/fr/messages.json
+++ b/fr/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Nombre d’utilisateurs aidés par votre Snowflake à contourner la censure au cours des dernières 24 heures : $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Les témoins ne sont pas activés."
},
diff --git a/he/messages.json b/he/messages.json
index 56080796db..107f341134 100644
--- a/he/messages.json
+++ b/he/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "מספר של משתמשים אשר Snowflake שלך עזר להם לעקוף צנזורה במהלך 24 השעות האחרונות: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "עוגיות אינן מאופשרות."
},
diff --git a/hr/messages.json b/hr/messages.json
index 6d518920e4..ca2b4f3d95 100644
--- a/hr/messages.json
+++ b/hr/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Broj korisnika kojima je Snowflake pomogao zaobići cenzuru u zadnjih 24 sata: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Kolačići nisu aktivirani."
},
diff --git a/it/messages.json b/it/messages.json
index 26bbac3217..5d3f0504d0 100644
--- a/it/messages.json
+++ b/it/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Numero di utenti che il tuo Snowflake ha aiutato ad aggirare la censura nelle ultime 24 ore: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "I cookie non sono attivati."
},
diff --git a/lt/messages.json b/lt/messages.json
index 8409ced8fd..f930140f69 100644
--- a/lt/messages.json
+++ b/lt/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Naudotojų skaičius, kuriems jūsų Snowflake padėjo apeiti cenzūrą per pastarąsias 24 valandas: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Slapukai nėra įjungti."
},
diff --git a/messages.json b/messages.json
index 0d638c7d48..393a1c46fc 100644
--- a/messages.json
+++ b/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/pt_BR/messages.json b/pt_BR/messages.json
index 0b910aaf2b..6a028b8b7f 100644
--- a/pt_BR/messages.json
+++ b/pt_BR/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Número de pessoas que driblaram censura com ajuda do seu Snowflake nas últimas 24 horas: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies não estão habilitados."
},
diff --git a/pt_PT/messages.json b/pt_PT/messages.json
index ddd18db77f..c31a05d691 100644
--- a/pt_PT/messages.json
+++ b/pt_PT/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Número de utilizadores que o seu Snowflake ajudou a contornar a censura nas últimas 24 horas: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Os cookies não estão ativados."
},
diff --git a/ru/messages.json b/ru/messages.json
index 8e8b74f41f..dfe4c12695 100644
--- a/ru/messages.json
+++ b/ru/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Пользователей, которым ваш Snowflake помог обойти цензуру за последние 24 часа: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Файлы-куки не включены."
},
diff --git a/sv_SE/messages.json b/sv_SE/messages.json
index 0d638c7d48..393a1c46fc 100644
--- a/sv_SE/messages.json
+++ b/sv_SE/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/tr/messages.json b/tr/messages.json
index b4ca4c1bcd..cf78ec7809 100644
--- a/tr/messages.json
+++ b/tr/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Snowflake uygulamanız son 24 saatte $1 kullanıcının sansürü aşmasına yardımcı oldu."
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Çerezler etkin değil."
},
diff --git a/zh_CN/messages.json b/zh_CN/messages.json
index ac6bd9ee28..b230e5014f 100644
--- a/zh_CN/messages.json
+++ b/zh_CN/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "您的 Snowflake 在过去的24小时中帮助了$1个用户规避审查。"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookie 未启用。"
},
diff --git a/zh_TW/messages.json b/zh_TW/messages.json
index 0d638c7d48..393a1c46fc 100644
--- a/zh_TW/messages.json
+++ b/zh_TW/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
1
0

[translation/snowflakeaddon-messages.json] https://gitweb.torproject.org/translation.git/commit/?h=snowflakeaddon-messages.json
by translation@torproject.org 07 May '20
by translation@torproject.org 07 May '20
07 May '20
commit 929ce330a4edc7af2cab323e7666fccf257f3f68
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu May 7 10:51:06 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=snowflakeaddon-mess…
---
ar/messages.json | 6 ++++++
bn_BD/messages.json | 6 ++++++
ca/messages.json | 6 ++++++
cs/messages.json | 6 ++++++
da/messages.json | 6 ++++++
de/messages.json | 6 ++++++
el/messages.json | 6 ++++++
en/messages.json | 6 ++++++
en_GB/messages.json | 6 ++++++
es_ES/messages.json | 6 ++++++
fa/messages.json | 6 ++++++
fr/messages.json | 6 ++++++
he/messages.json | 6 ++++++
hr/messages.json | 6 ++++++
hu/messages.json | 6 ++++++
id/messages.json | 6 ++++++
is/messages.json | 6 ++++++
it/messages.json | 6 ++++++
ja/messages.json | 6 ++++++
ka/messages.json | 6 ++++++
lt/messages.json | 6 ++++++
messages.json | 6 ++++++
mk/messages.json | 6 ++++++
ml/messages.json | 6 ++++++
nb_NO/messages.json | 6 ++++++
nl/messages.json | 6 ++++++
pl/messages.json | 6 ++++++
pt_BR/messages.json | 6 ++++++
pt_PT/messages.json | 6 ++++++
ro/messages.json | 6 ++++++
ru/messages.json | 6 ++++++
sk/messages.json | 6 ++++++
sv_SE/messages.json | 6 ++++++
ta/messages.json | 6 ++++++
th/messages.json | 6 ++++++
tr/messages.json | 6 ++++++
uk/messages.json | 6 ++++++
zh_CN/messages.json | 6 ++++++
zh_TW/messages.json | 6 ++++++
39 files changed, 234 insertions(+)
diff --git a/ar/messages.json b/ar/messages.json
index 8844bba7d3..0ca036a6fb 100644
--- a/ar/messages.json
+++ b/ar/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "عدد المستخدمين فى آخر 24 ساعة الذين ساعدهم Snowflake الخاص بك على تخطى الرقابة: $1"
},
+ "popupRetry": {
+ "message": "حاول مجددا"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "ملفات تعريف الارتباط (كوكيز) غير مفعلة."
},
diff --git a/bn_BD/messages.json b/bn_BD/messages.json
index 3df4ce1166..9da69bf528 100644
--- a/bn_BD/messages.json
+++ b/bn_BD/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "বিগত ২৪ ঘন্টায় আপনার Snowflake ব্যাবহারকারিদের সেন্সর থেকে দূরে রাখতে সহায়তাকারীর সংখ্যা : $1"
},
+ "popupRetry": {
+ "message": "আবার চেষ্টা করুন"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "কুকিজ সক্রিয় নয়।"
},
diff --git a/ca/messages.json b/ca/messages.json
index d0f4311aed..5e8559a214 100644
--- a/ca/messages.json
+++ b/ca/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Nombre d'usuaris que el vostre Snowflake ha ajudat a eludir la censura en les últimes 24 hores: $1"
},
+ "popupRetry": {
+ "message": "Reintenta"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Les galetes no estan activades."
},
diff --git a/cs/messages.json b/cs/messages.json
index 4d881c1935..26d18a6e33 100644
--- a/cs/messages.json
+++ b/cs/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Počet uživatelů, kterým pomohl tvůj Snowflake obejít cenzuru za posledních 24 hodin: $1"
},
+ "popupRetry": {
+ "message": "Opakovat"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies nejsou povoleny."
},
diff --git a/da/messages.json b/da/messages.json
index 5924bc8763..01261f8b03 100644
--- a/da/messages.json
+++ b/da/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Antal brugere som din Snowflake har hjulpet med at omgå censur indenfor de sidste 24 timer: $1"
},
+ "popupRetry": {
+ "message": "Forsøg igen"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies er ikke aktiveret."
},
diff --git a/de/messages.json b/de/messages.json
index ab6dd64b0b..433af57811 100644
--- a/de/messages.json
+++ b/de/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Anzahl der Benutzer, denen dein Snowflake in den letzten 24 Stunden geholfen hat, die Zensur zu umgehen: $1"
},
+ "popupRetry": {
+ "message": "Versuche erneut"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies sind nicht aktiviert."
},
diff --git a/el/messages.json b/el/messages.json
index ccdc2bab3c..143e4e3837 100644
--- a/el/messages.json
+++ b/el/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Ο αριθμός των χρηστών στο δικό σας Snowflake έχει βοηθήσει στην παράκαμψη της λογοκρισίας κατά τις τελευταίες 24 ώρες: $1"
},
+ "popupRetry": {
+ "message": "Ξαναδοκίμασε"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Τα Cookies δεν είναι ενεργοποιημένα."
},
diff --git a/en/messages.json b/en/messages.json
index 0d638c7d48..393a1c46fc 100644
--- a/en/messages.json
+++ b/en/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/en_GB/messages.json b/en_GB/messages.json
index d60bf432ce..c7c9e08f13 100644
--- a/en_GB/messages.json
+++ b/en_GB/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/es_ES/messages.json b/es_ES/messages.json
index 348d0421bc..0f4f799fcd 100644
--- a/es_ES/messages.json
+++ b/es_ES/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Número de usuarios que tu Snowflake ha ayudado a sortear la censura en las últimas 24 horas: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Las cookies no están habilitadas."
},
diff --git a/fa/messages.json b/fa/messages.json
index 5fcc395bde..e90218ee35 100644
--- a/fa/messages.json
+++ b/fa/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "تعداد کاربرانی که برفدانهی شما در 24 ساعت گذشته به آنها کمک کرده تا سانسور را دور بزنند: $1"
},
+ "popupRetry": {
+ "message": "تلاش دوباره"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "کوکی ها فعال نیستند."
},
diff --git a/fr/messages.json b/fr/messages.json
index 9129dd008a..3ff2194fb2 100644
--- a/fr/messages.json
+++ b/fr/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Nombre d’utilisateurs aidés par votre Snowflake à contourner la censure au cours des dernières 24 heures : $1"
},
+ "popupRetry": {
+ "message": "Ressayer"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Les témoins ne sont pas activés."
},
diff --git a/he/messages.json b/he/messages.json
index 56080796db..026cab67e3 100644
--- a/he/messages.json
+++ b/he/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "מספר של משתמשים אשר Snowflake שלך עזר להם לעקוף צנזורה במהלך 24 השעות האחרונות: $1"
},
+ "popupRetry": {
+ "message": "נסה שוב"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "עוגיות אינן מאופשרות."
},
diff --git a/hr/messages.json b/hr/messages.json
index 6d518920e4..430580ba21 100644
--- a/hr/messages.json
+++ b/hr/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Broj korisnika kojima je Snowflake pomogao zaobići cenzuru u zadnjih 24 sata: $1"
},
+ "popupRetry": {
+ "message": "Pokušaj ponovno"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Kolačići nisu aktivirani."
},
diff --git a/hu/messages.json b/hu/messages.json
index eb3e84603e..7c19242dda 100644
--- a/hu/messages.json
+++ b/hu/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Az Ön Snowflake-je az elmúlt 24 órában ennyi felhasználónak segített a cenzúra elkerülésében: $1"
},
+ "popupRetry": {
+ "message": "Újra"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "A cookie-k nincsenek engedélyezve."
},
diff --git a/id/messages.json b/id/messages.json
index eaf9ab7684..cca6f6d8f2 100644
--- a/id/messages.json
+++ b/id/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Jumlah pengguna Snowflake anda telah membantu menghindari sensor dalam 24 jam terakhir: $1"
},
+ "popupRetry": {
+ "message": "Coba Lagi"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Kue tidak diadakan."
},
diff --git a/is/messages.json b/is/messages.json
index beceb1a510..2f69a74e3b 100644
--- a/is/messages.json
+++ b/is/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Fjöldi notenda sem Snowflake-tilvikið þitt hefur hjálpað við að komast framhjá ritskoðun á síðustu 24 klukkustundum: $1"
},
+ "popupRetry": {
+ "message": "Reyna aftur"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Vefkökur eru ekki virkar."
},
diff --git a/it/messages.json b/it/messages.json
index 26bbac3217..37f834b11f 100644
--- a/it/messages.json
+++ b/it/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Numero di utenti che il tuo Snowflake ha aiutato ad aggirare la censura nelle ultime 24 ore: $1"
},
+ "popupRetry": {
+ "message": "Riprova"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "I cookie non sono attivati."
},
diff --git a/ja/messages.json b/ja/messages.json
index 045827a018..e053a6db7f 100644
--- a/ja/messages.json
+++ b/ja/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Snowflakeが過去24時間に検閲を回避したユーザーの数:$1"
},
+ "popupRetry": {
+ "message": "再試行"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "クッキーが有効になっていません。"
},
diff --git a/ka/messages.json b/ka/messages.json
index 94e01cdd99..0d809fb1fa 100644
--- a/ka/messages.json
+++ b/ka/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "მომხმარებლების რაოდენობა, რომელთაც თქვენი Snowflake დაეხმარა ცენზურისთვის გვერდის ავლაში, ბოლო 24 საათში: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "ფუნთუშები არაა ჩართული."
},
diff --git a/lt/messages.json b/lt/messages.json
index 8409ced8fd..9268e895ea 100644
--- a/lt/messages.json
+++ b/lt/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Naudotojų skaičius, kuriems jūsų Snowflake padėjo apeiti cenzūrą per pastarąsias 24 valandas: $1"
},
+ "popupRetry": {
+ "message": "Pakartoti"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Slapukai nėra įjungti."
},
diff --git a/messages.json b/messages.json
index 0d638c7d48..393a1c46fc 100644
--- a/messages.json
+++ b/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/mk/messages.json b/mk/messages.json
index a11a0d31d0..b61b61270c 100644
--- a/mk/messages.json
+++ b/mk/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Број на корисници кој вашиот Snowflake им помогнал да ја заобиколаат цензурата во последните 24 часа: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Колачињата не се овозможени."
},
diff --git a/ml/messages.json b/ml/messages.json
index 4ac7baa4af..0b03d25e51 100644
--- a/ml/messages.json
+++ b/ml/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "അവസാനത്തെ 24 മണിക്കൂറിൽ നിങ്ങളുടെ സ്നോ ഫ്ളൈക് സെന്സര്ഷിപ് ഒഴിവാക്കാൻ സഹായിച്ച യൂസേഴ്സിന്റെ എണ്ണം $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "കുകീസ് അനുവദിച്ചിട്ടില്ല "
},
diff --git a/nb_NO/messages.json b/nb_NO/messages.json
index dd719c23fb..15637c5946 100644
--- a/nb_NO/messages.json
+++ b/nb_NO/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Prøv igjen"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/nl/messages.json b/nl/messages.json
index 0daf5e6f0d..22b97801cd 100644
--- a/nl/messages.json
+++ b/nl/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Aantal gebruikers die dankzij uw Snowflake de afgelopen 24 uur censuur hebben kunnen omzeilen: $1"
},
+ "popupRetry": {
+ "message": "Opnieuw proberen"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies zijn niet ingeschakeld."
},
diff --git a/pl/messages.json b/pl/messages.json
index fa6b1eb38b..0d706b952f 100644
--- a/pl/messages.json
+++ b/pl/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Ilość osób twój Snowflake pomógł uniknąć cenzury przez ostatnie 24 godziny 1$1"
},
+ "popupRetry": {
+ "message": "Ponów"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Ciasteczka nie są włączone"
},
diff --git a/pt_BR/messages.json b/pt_BR/messages.json
index 0b910aaf2b..4b2f82ae5a 100644
--- a/pt_BR/messages.json
+++ b/pt_BR/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Número de pessoas que driblaram censura com ajuda do seu Snowflake nas últimas 24 horas: $1"
},
+ "popupRetry": {
+ "message": "Tentar de novo"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies não estão habilitados."
},
diff --git a/pt_PT/messages.json b/pt_PT/messages.json
index ddd18db77f..30a445d259 100644
--- a/pt_PT/messages.json
+++ b/pt_PT/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Número de utilizadores que o seu Snowflake ajudou a contornar a censura nas últimas 24 horas: $1"
},
+ "popupRetry": {
+ "message": "Repetir"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Os cookies não estão ativados."
},
diff --git a/ro/messages.json b/ro/messages.json
index b521a080f1..0df0a77abf 100644
--- a/ro/messages.json
+++ b/ro/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Numărul de utilizatori pe care Snowflake de pe dispozitivul dvs. i-a ajutat să ocolească cenzura în ultimile 24 de ore: $1"
},
+ "popupRetry": {
+ "message": "Încearcă din nou"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookie-urile nu sunt activate."
},
diff --git a/ru/messages.json b/ru/messages.json
index 8e8b74f41f..f5dae77b87 100644
--- a/ru/messages.json
+++ b/ru/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Пользователей, которым ваш Snowflake помог обойти цензуру за последние 24 часа: $1"
},
+ "popupRetry": {
+ "message": "Повторить"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Файлы-куки не включены."
},
diff --git a/sk/messages.json b/sk/messages.json
index ca0053bd9f..9b64f7911b 100644
--- a/sk/messages.json
+++ b/sk/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Počet používateľov, ktorým Snowflake pomohol obísť cenzúru za posledných 24 hodín: $1"
},
+ "popupRetry": {
+ "message": "Opakovať"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Súbory Cookies niesú povolené."
},
diff --git a/sv_SE/messages.json b/sv_SE/messages.json
index 0719859afc..6685552f62 100644
--- a/sv_SE/messages.json
+++ b/sv_SE/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Antal användare din Snowflake har hjälpt kringgå censur under de senaste 24 timmarna: $1"
},
+ "popupRetry": {
+ "message": "Försök igen"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Kakor är inte aktiverade."
},
diff --git a/ta/messages.json b/ta/messages.json
index 4141518b29..d07482de2f 100644
--- a/ta/messages.json
+++ b/ta/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "கடந்த 24 மணி நேரத்தில் தணிக்கையைத் தவிர்த்துச்செல்லுமாறு உங்கள் Snowflake உதவி செய்த பயனர்களின் எண்ணிக்கை: $1"
},
+ "popupRetry": {
+ "message": "மீண்டும் முயற்சி செய்"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "நினைவிகள் செயல்படுத்தப்படவில்லை."
},
diff --git a/th/messages.json b/th/messages.json
index cc63bca835..ab0c02c763 100644
--- a/th/messages.json
+++ b/th/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "จำนวนผู้ใช้ที่ Snowflake ของคุณได้ช่วยหลบเลี่ยงการปิดกั้นใน 24 ชั่วโมงที่ผ่านมา: $1"
},
+ "popupRetry": {
+ "message": "ลองใหม่"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "คุกกี้ไม่ได้ถูกเปิดใช้งาน"
},
diff --git a/tr/messages.json b/tr/messages.json
index b4ca4c1bcd..e975e3c411 100644
--- a/tr/messages.json
+++ b/tr/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Snowflake uygulamanız son 24 saatte $1 kullanıcının sansürü aşmasına yardımcı oldu."
},
+ "popupRetry": {
+ "message": "Yeniden Dene"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Çerezler etkin değil."
},
diff --git a/uk/messages.json b/uk/messages.json
index ec0bafe527..72fd633c1e 100644
--- a/uk/messages.json
+++ b/uk/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Кількість користувачів, яким ваш Snowflake допоміг обійти цензуру протягом останніх 24 годин: $1"
},
+ "popupRetry": {
+ "message": "Повторити"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Куки не увімкнено."
},
diff --git a/zh_CN/messages.json b/zh_CN/messages.json
index ac6bd9ee28..54bea1358c 100644
--- a/zh_CN/messages.json
+++ b/zh_CN/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "您的 Snowflake 在过去的24小时中帮助了$1个用户规避审查。"
},
+ "popupRetry": {
+ "message": "重试"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookie 未启用。"
},
diff --git a/zh_TW/messages.json b/zh_TW/messages.json
index 7cc12b99fb..eb832e9aa6 100644
--- a/zh_TW/messages.json
+++ b/zh_TW/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "在過去24個小時內,您的 Snowflake 已經成功幫助 $1 人繞過網路審查過濾"
},
+ "popupRetry": {
+ "message": "重試"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookie 功能未啟用。"
},
1
0

[translation/snowflakeaddon-messages.json] https://gitweb.torproject.org/translation.git/commit/?h=snowflakeaddon-messages.json
by translation@torproject.org 07 May '20
by translation@torproject.org 07 May '20
07 May '20
commit 02d8b8b5c2b400fcf805ad95b4362bf63eb95b82
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu May 7 08:47:13 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=snowflakeaddon-mess…
---
hu/messages.json | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/hu/messages.json b/hu/messages.json
index 7f76d8c0ba..eb3e84603e 100644
--- a/hu/messages.json
+++ b/hu/messages.json
@@ -1,6 +1,6 @@
{
"appDesc": {
- "message": "A Snowflake egy WebRTC csatlakoztatható átvivő a Tor-hoz."
+ "message": "A Snowflake (Hópihe) egy WebRTC csatlakoztatható átvivő a Tor-hoz."
},
"popupEnabled": {
"message": "Engedélyezve"
@@ -15,16 +15,16 @@
"message": "Jelenleg kapcsolódott felhasználók száma: $1"
},
"popupStatusReady": {
- "message": "Your Snowflake is ready to help users circumvent censorship"
+ "message": "Az ön Snowflake-je kész arra, hogy segítse a cenzúra elkerülésében."
},
"popupWebRTCOff": {
"message": "WebRTC szolgáltatás nem észlelt."
},
"popupBridgeUnreachable": {
- "message": "Could not connect to the bridge."
+ "message": "Sikertelen a csatlakozni a hídhoz."
},
"popupDescOn": {
- "message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
+ "message": "Az Ön Snowflake-je az elmúlt 24 órában ennyi felhasználónak segített a cenzúra elkerülésében: $1"
},
"badgeCookiesOff": {
"message": "A cookie-k nincsenek engedélyezve."
@@ -33,7 +33,7 @@
"message": "Snowflake is a system to defeat internet censorship. People who are censored can use Snowflake to access the internet. Their connection goes through Snowflake proxies, which are run by volunteers. For more detailed information about how Snowflake works see our <a href=\"https://trac.torproject.org/projects/tor/wiki/doc/Snowflake/\" data-msgid=\"__MSG_docWiki__\">documentation wiki</a>."
},
"docWiki": {
- "message": "documentation wiki"
+ "message": "dokumentáció wiki"
},
"browser": {
"message": "Böngésző"
@@ -48,16 +48,16 @@
"message": "If your internet access is <strong>not</strong> censored, you should consider installing the Snowflake extension to help users in censored networks. There is no need to worry about which websites people are accessing through your proxy. Their visible browsing IP address will match their Tor exit node, not yours."
},
"installFirefox": {
- "message": "Telepítés Firefox-ban"
+ "message": "Telepítés Firefox-ba"
},
"installChrome": {
- "message": "Telepítés Chrome-ban"
+ "message": "Telepítés Chrome-ba"
},
"reportingBugs": {
"message": "Hibajelentés"
},
"fileBug": {
- "message": "If you encounter problems with Snowflake as a client or a proxy, please consider filing a bug. To do so, you will have to,"
+ "message": "Ha problémát tapasztal a Snowflake, mint kliens vagy proxy, gondoljon arra, hogy beküldjön egy hibát. Ahhoz, hogy így tegyen a következőket teheti,"
},
"sharedAccount": {
"message": "Either <a href=\"https://trac.torproject.org/projects/tor/register\">create an account</a> or <a href=\"https://trac.torproject.org/projects/tor/login\">log in</a> using the shared <b>cypherpunks</b> account with password <b>writecode</b>."
@@ -72,7 +72,7 @@
"message": "Beágyazás"
},
"possible": {
- "message": "It is now possible to embed the Snowflake badge on any website:"
+ "message": "Most már lehetséges, hogy beágyazza a Snowflake kitűzőt bármelyik weboldalba:"
},
"looksLike": {
"message": "Amely így néz ki:"
1
0

[translation/support-portal] https://gitweb.torproject.org/translation.git/commit/?h=support-portal
by translation@torproject.org 07 May '20
by translation@torproject.org 07 May '20
07 May '20
commit 1954f86427ae1aabece5e2bafa39ac0c00f357b2
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu May 7 03:23:29 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=support-portal
---
contents+zh-CN.po | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/contents+zh-CN.po b/contents+zh-CN.po
index a311720d6c..b7065be656 100644
--- a/contents+zh-CN.po
+++ b/contents+zh-CN.po
@@ -7801,7 +7801,7 @@ msgstr ""
#: https//support.torproject.org/onionservices/onionservices-5/
#: (content/onionservices/onionservices-5/contents+en.lrquestion.description)
msgid "- The webpage contains subresources served over HTTP."
-msgstr ""
+msgstr "-网页包含了在HTTP上的子资源。"
#: https//support.torproject.org/misc/bug-or-feedback/
#: (content/misc/bug-or-feedback/contents+en.lrquestion.title)
@@ -8605,7 +8605,7 @@ msgstr ""
#: https//support.torproject.org/get-in-touch/why-i-cant-join-tor-channels/
#: (content/get-in-touch/why-i-cant-join-tor-channels/contents+en.lrquestion.description)
msgid "Every time you log on to IRC, to identify your registered nick, type:"
-msgstr ""
+msgstr "每当您登入IRC时,为了验证您的注册昵称,请输入:"
#: https//support.torproject.org/get-in-touch/why-i-cant-join-tor-channels/
#: (content/get-in-touch/why-i-cant-join-tor-channels/contents+en.lrquestion.description)
1
0

[translation/support-portal] https://gitweb.torproject.org/translation.git/commit/?h=support-portal
by translation@torproject.org 07 May '20
by translation@torproject.org 07 May '20
07 May '20
commit 77499b5b3b6ac03be5a5c3f2f33246ba6890547c
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu May 7 02:54:31 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=support-portal
---
contents+zh-CN.po | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/contents+zh-CN.po b/contents+zh-CN.po
index 502fea1a6e..a311720d6c 100644
--- a/contents+zh-CN.po
+++ b/contents+zh-CN.po
@@ -445,6 +445,8 @@ msgid ""
"stored on the user's computer by the user's [web browser](../web-browser) "
"while the user is browsing."
msgstr ""
+"[HTTP](../http) cookie (又称互联网cookie,因特网cookie,浏览器cookie,或简称cookie) "
+"是在用户浏览时,从网站发送到用户计算机上并被用户的互联网浏览器储存下来的一小段数据。"
#: https//support.torproject.org/glossary/cookie/
#: (content/glossary/cookie/contents+en.lrword.definition)
@@ -6640,6 +6642,7 @@ msgid ""
"For the most in-depth resource on running a relay, see the [Relay Setup "
"Guide](https://community.torproject.org/relay/setup)."
msgstr ""
+"想了解更深入了解如何运行一个中继服务器,请参阅[中继服务器设置指南](https://community.torproject.org/relay/s…"
#: https//support.torproject.org/operators/operators-2/
#: (content/operators/operators-2/contents+en.lrquestion.title)
@@ -7740,7 +7743,7 @@ msgstr "不同的在地址栏的洋葱图标代表着什么?"
msgid ""
"When browsing an Onion Service, Tor Browser displays different onion icons "
"in the address bar indicating the security of the current webpage."
-msgstr ""
+msgstr "当浏览一项洋葱服务时,Tor 浏览器会在地址栏展示不同的洋葱图标,来表示当前网站的安全等级。"
#: https//support.torproject.org/onionservices/onionservices-5/
#: (content/onionservices/onionservices-5/contents+en.lrquestion.description)
@@ -7842,6 +7845,8 @@ msgid ""
"opened the browser, typed a url, clicked on (i) icon, then my browser "
"crashed)"
msgstr ""
+"* "
+"请详细叙述您遇到问题的过程和步骤,以便于我们重新还原您遇到的问题。(比如,“我打开了浏览器,输入了一个网页地址,点击了图标,然后我的浏览器就崩溃了。“)"
#: https//support.torproject.org/misc/bug-or-feedback/
#: (content/misc/bug-or-feedback/contents+en.lrquestion.description)
@@ -7862,7 +7867,7 @@ msgstr "### 如何与我们联系"
#: (content/misc/bug-or-feedback/contents+en.lrquestion.description)
msgid ""
"There are several ways to reach us, so please use what works best for you."
-msgstr ""
+msgstr "有多种方式可以联系我们,请选择对您来说最方便的一种。"
#: https//support.torproject.org/misc/bug-or-feedback/
#: (content/misc/bug-or-feedback/contents+en.lrquestion.description)
@@ -7919,7 +7924,7 @@ msgid ""
"You can always leave comments on the blog post related to the issue or "
"feedback you want to report. If there is not a blog post related to your "
"issue, please contact us another way."
-msgstr ""
+msgstr "您可以在与您想要报告的问题或反馈有关的博客帖子下评论。如果没有有关的博客帖子,请您用其它方式联系我们。"
#: https//support.torproject.org/misc/bug-or-feedback/
#: (content/misc/bug-or-feedback/contents+en.lrquestion.description)
@@ -7933,6 +7938,7 @@ msgid ""
"bugs/issues. We may not respond right away, but we do check the backlog and "
"will get back to you when we can."
msgstr ""
+"您可以在OFTC 的# tor频道上找到我们,并给我们反馈或报告故障/ 问题。我们可能不会立刻回复,但我们会检查累积的问题,并在可能的时候回复您。"
#: https//support.torproject.org/misc/bug-or-feedback/
#: (content/misc/bug-or-feedback/contents+en.lrquestion.description)
@@ -8429,6 +8435,7 @@ msgid ""
"You can read all about that on our [Trademark faq "
"page](https://www.torproject.org/about/trademark/)."
msgstr ""
+"您可以在我们的[商标常见问题页面](https://www.torproject.org/about/trademark/) 看到所有有关内容。"
#: https//support.torproject.org/misc/misc-9/
#: (content/misc/misc-9/contents+en.lrquestion.title)
1
0