tor-commits
Threads by month
- ----- 2025 -----
- 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
December 2021
- 15 participants
- 1464 discussions

[orbot/master] "he" is a long deprecated locale for Hebrew. "iw" is canonical
by n8fr8@torproject.org 22 Dec '21
by n8fr8@torproject.org 22 Dec '21
22 Dec '21
commit 9fe040935f329528c929620e85f2732b126ce404
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Tue May 4 11:44:55 2021 +0200
"he" is a long deprecated locale for Hebrew. "iw" is canonical
---
app-mini/src/main/res/values-he/strings.xml | 184 -----------------------
app/src/main/res/values-he/strings.xml | 190 ------------------------
lint.xml | 8 +-
orbotservice/src/main/res/values-he/strings.xml | 23 ---
4 files changed, 1 insertion(+), 404 deletions(-)
diff --git a/app-mini/src/main/res/values-he/strings.xml b/app-mini/src/main/res/values-he/strings.xml
deleted file mode 100644
index 28552309..00000000
--- a/app-mini/src/main/res/values-he/strings.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<resources>
- <string name="app_name">Orbot</string>
- <string name="app_description">Orbot הוא יישום חינמי של יפוי־כוח המעצים יישומים אחרים להשתמש באינטרנט יותר בבטחה. Orbot משתמש ב-Tor כדי להצפין את תעבורת האינטרנט שלך ואז מסתיר אותה באמצעות הקפצה דרך סדרת מחשבים ברחבי העולם. Tor הוא תוכנה חינמית ורשת פתוחה העוזרת לך להתגונן מפני צורה של מעקב ברשת המאיים על חירות אישית ופרטיות, פעילויות עסקיות חשאיות, ובטחון מדינה המוכר בשם ניתוח תעבורה.</string>
- <string name="status_starting_up">Orbot מתחיל…</string>
- <string name="status_activated">מחובר לרשת Tor</string>
- <string name="status_disabled">Orbot כבוי</string>
- <string name="status_shutting_down">שירות Tor מתכבה</string>
- <string name="menu_settings">הגדרות</string>
- <string name="menu_log">יומן</string>
- <string name="menu_start">התחל</string>
- <string name="menu_stop">עצור</string>
- <string name="menu_about">אודות</string>
- <string name="main_layout_download">הורדה</string>
- <string name="main_layout_upload">העלאה</string>
- <string name="button_about">אודות</string>
- <string name="menu_exit">יציאה</string>
- <string name="menu_scan">סרוק BridgeQR</string>
- <string name="menu_share_bridge">שתף BridgeQR</string>
- <string name="btn_okay">אישור</string>
- <!--Welcome Wizard strings (DJH)-->
- <string name="wizard_details">פרטים מסוימים של Orbot </string>
- <string name="wizard_details_msg">Orbot הוא יישום מקור־פתוח אשר מכיל את Tor, Obfs4Proxy, BadVPN Tun2Socks, LibEvent ו-Polipo. הוא מספק יפוי־כוח מקומי של HTTP (פתחה 8118) ויפוי־כוח SOCKS (פתחה 9050) לתוך רשת Tor. ל-Orbot יש גם את היכולת, במכשירים עם הרשאת שורש, לשלוח את כל תעבורת האינטרנט באמצעות Tor.</string>
- <!--END Welcome Wizard strings (DJH)-->
- <string name="pref_general_group">כללי</string>
- <string name="pref_start_boot_title">התחל את Orbot בהדלקת המכשיר</string>
- <string name="pref_start_boot_summary">התחל את Orbot והתחבר לרשת Tor אוטומטית כאשר המכשיר נדלק</string>
- <!--New Wizard Strings-->
- <!--Title Screen-->
- <!--Warning screen-->
- <!--Permissions screen-->
- <!--TipsAndTricks screen-->
- <!--Transparent Proxy screen-->
- <string name="pref_node_configuration">הגדרות Node</string>
- <string name="pref_node_configuration_summary">קיימות הגדרות מתקדמות שיכולות להפחית את האנונימיות שלך</string>
- <string name="pref_entrance_node">Entrance Nodes</string>
- <string name="pref_entrance_node_summary">טביעות אצבע, כינויים, ארצות וכתובות עבור המעבר הראשון</string>
- <string name="pref_entrance_node_dialog">הכנס Entrance Nodes</string>
- <string name="pref_allow_background_starts_title">אפשר הפעלה ברקע</string>
- <string name="pref_allow_background_starts_summary">אפשר לכל אפליקציה להפעיל דרך Orbot את Tor ושאר השירותים הקשורים</string>
- <string name="pref_proxy_title">רשת יפוי־כוח יוצאת (רשותי)</string>
- <string name="pref_proxy_type_title">Outbound Proxy Type</string>
- <string name="pref_proxy_type_summary">פרוטוקול לשימוש עבור שרת יפוי־כוח: HTTP, HTTPS, Socks4, Socks5</string>
- <string name="pref_proxy_type_dialog">הכנס סוג יפוי־כוח</string>
- <string name="pref_proxy_host_title">מארח של Outbound Proxy</string>
- <string name="pref_proxy_host_summary">שם מארח של שרת יפוי־כוח</string>
- <string name="pref_proxy_host_dialog">הכנס מארח יפוי־כוח</string>
- <string name="pref_proxy_port_title">פתחת יפוי־כוח של Outbound</string>
- <string name="pref_proxy_port_summary">פתחת שרת יפוי־כוח</string>
- <string name="pref_proxy_port_dialog">הכנס פתחת יפוי־כוח</string>
- <string name="pref_proxy_username_title">שם משתמש של Outbound Proxy</string>
- <string name="pref_proxy_username_summary">שם משתמש של יפוי־כוח (רשותי)</string>
- <string name="pref_proxy_username_dialog">הכנס שם משתמש של יפוי־כוח</string>
- <string name="pref_proxy_password_title">סיסמא של Outbound Proxy</string>
- <string name="pref_proxy_password_summary">סיסמת יפוי־כוח (רשותי)</string>
- <string name="pref_proxy_password_dialog">הכנס סיסמת יפוי־כוח</string>
- <string name="couldn_t_start_tor_process_">אין אפשרות להתחיל תהליך Tor:</string>
- <string name="error">שגיאה</string>
- <string name="your_reachableaddresses_settings_caused_an_exception_">ההגדרות של הכתובות הנגישות שלך גרמו לחריגה!</string>
- <string name="your_relay_settings_caused_an_exception_">הגדרות הממסר שלך גרמו לחריגה!</string>
- <string name="exit_nodes">צמתי יציאה</string>
- <string name="fingerprints_nicks_countries_and_addresses_for_the_last_hop">טביעות אצבע, כינויים, מדינות וכתובות עבור הניתור האחרון.</string>
- <string name="enter_exit_nodes">הזן צמתי יציאה</string>
- <string name="exclude_nodes">צמתים מוצאים</string>
- <string name="fingerprints_nicks_countries_and_addresses_to_exclude">טביעות אצבע, כינויים, מדינות וכתובות לשלילה</string>
- <string name="enter_exclude_nodes">הזן צמתים מוצאים</string>
- <string name="strict_nodes">צמתים קפדנים</string>
- <string name="use_only_these_specified_nodes">השתמש *רק* בצמתים מצוינים אלו</string>
- <string name="bridges">גשרים</string>
- <string name="use_bridges">השתמש בגשרים</string>
- <string name="enable_alternate_entrance_nodes_into_the_tor_network">אפשר כניסות חלופיות לתוך רשת Tor</string>
- <string name="ip_address_and_port_of_bridges">כתובת IP ופתחה של גשרים</string>
- <string name="enter_bridge_addresses">הכנס כתובות גשר</string>
- <string name="relays">ממסרים</string>
- <string name="relaying">ממסור</string>
- <string name="enable_your_device_to_be_a_non_exit_relay">אפשר למכשיר שלך להיות תחנת ממסר שאיננה יציאה</string>
- <string name="relay_port">פתחת הממסר</string>
- <string name="listening_port_for_your_tor_relay">פתחת האזנה עבור ממסר Tor שלך</string>
- <string name="enter_or_port"> הכנס פתחת OR</string>
- <string name="relay_nickname">כינוי הממסר</string>
- <string name="the_nickname_for_your_tor_relay">הכינוי לממסר Tor שלך</string>
- <string name="enter_a_custom_relay_nickname">הזן כינוי עבור ממסר</string>
- <string name="reachable_addresses">כתובות נגישות</string>
- <string name="run_as_a_client_behind_a_firewall_with_restrictive_policies">הרץ כלקוח תחת חומת אש עם מדינויות מגבילות</string>
- <string name="reachable_ports">פתחות נגישות</string>
- <string name="ports_reachable_behind_a_restrictive_firewall">פתחות נגישות מאוחרי חומת אש מגבילה</string>
- <string name="enter_ports">הכנס פתחות</string>
- <string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">אפשר יומן ניפוי תקלים אל פלט (חייב להשתמש ב-adb או ב-aLogCat כדי להציג)</string>
- <string name="project_home">אתרי הפרויקט:</string>
- <string name="project_urls">https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/…</string>
- <string name="third_party_software">תוכנה-צד-ג׳: </string>
- <string name="tor_version">Tor: https://www.torproject.org</string>
- <string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
- <string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">יישום רוצה לפתוח פתחה של שרת נסתר %1$s אל רשת Tor. זה בטוח אם אתה בוטח ביישום.</string>
- <string name="found_existing_tor_process">נמצא תהליך Tor קיים…</string>
- <string name="something_bad_happened">משהו רע התרחש. בדוק את היומן</string>
- <string name="unable_to_read_hidden_service_name">לא היה ניתן לקרוא שם של שירות נסתר</string>
- <string name="unable_to_start_tor">לא מסוגל להתחיל את Tor:</string>
- <string name="pref_use_persistent_notifications">לשמור תמיד את האיקון בסרגל כלים כשאורבוט מחובר</string>
- <string name="pref_use_persistent_notifications_title">התראות תמיד-פועל</string>
- <string name="pref_use_expanded_notifications">הראה התראה מורחבת עם מדינת יציאה ו-IP יציאה של Tor</string>
- <string name="pref_use_expanded_notifications_title">התראות מורחבות</string>
- <string name="set_locale_title">שפה</string>
- <string name="pref_disable_network_title">אין שינה אוטומטית של רשת</string>
- <string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
- <string name="newnym">החלפת אל זהות Tor חדשה!</string>
- <string name="updating_settings_in_tor_service">מעדכן הגדרות Tor במכשיר</string>
- <string name="pref_socks_title">Tor SOCKS</string>
- <string name="pref_socks_summary">פתחה אשר Tor מציע את יפוי־הכוח SOCKS שלו עליה (ברירת מחדל: 9050 או 0 כדי להשבית)</string>
- <string name="pref_socks_dialog">תצורת פתחות SOCKS</string>
- <string name="pref_transport_title">פתחת Tor TransProxy</string>
- <string name="pref_transport_summary">פתחה אשר Tor מציע את יפוי־הכוח השקוף שלו עליה (ברירת מחדל: 9040 או 0 כדי להשבית)</string>
- <string name="pref_transport_dialog">תצורת פתחות TransProxy</string>
- <string name="pref_dnsport_title">פתחת DNS של Tor</string>
- <string name="pref_dnsport_summary">פתחה אשר Tor מציע את ה-DNS שלו עליה (ברירת מחדל: 5400 או 0 כדי להשבית)</string>
- <string name="pref_dnsport_dialog">תצורה של פתחת DNS</string>
- <string name="pref_torrc_title">תצורה מותאמת אישית של Torrc</string>
- <string name="pref_torrc_summary">מומחים בלבד: הכנס שורות תצורת torrc ישיר</string>
- <string name="pref_torrc_dialog">Torrc מותאם אישית</string>
- <string name="kb">ק\"ב</string>
- <string name="mb">מ\"ב</string>
- <string name="bridges_updated">גשרים עודכנו</string>
- <string name="restart_orbot_to_use_this_bridge_">אנא הפעל מחדש את Orbot כדי לאפשר את השינויים</string>
- <string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">אם פעילות הרשת הניידת שלך חוסמת את Tor, אתה יכול להשתמש ב\'שרת גשר\' כדרך חלופית להיכנס. בחר אחת מאפשרויות כדי להגדיר ולבחון...</string>
- <string name="get_bridges_email">דוא\"ל</string>
- <string name="activate">הפעל</string>
- <string name="apps_mode">מצב VPN</string>
- <string name="send_email">שלח דוא\"ל</string>
- <string name="vpn_default_world">עולמי (אוטומטי)</string>
- <string name="hidden_services">שירותים נסתרים</string>
- <string name="title_activity_hidden_services">שירותים נסתרים</string>
- <string name="menu_hidden_services">שירותים נסתרים</string>
- <string name="save">שמור את</string>
- <string name="local_port">פתחה מקומית</string>
- <string name="onion_port">פתחת בצל</string>
- <string name="name">שם</string>
- <string name="done">הסתיים!</string>
- <string name="copy_address_to_clipboard">העתק כתובת ללוח עריכה</string>
- <string name="show_auth_cookie">הראה עוגיית אימות</string>
- <string name="backup_service">גבה שירות</string>
- <string name="delete_service">מחק שירות</string>
- <string name="backup_saved_at_external_storage">גיבוי נשמר באחסון חיצוני</string>
- <string name="backup_restored">גיבוי שוחזר</string>
- <string name="restore_backup">שחזר גיבוי</string>
- <string name="start_tor_again_for_finish_the_process">הפעל את Tor שוב כדי לסיים את התהליך</string>
- <string name="confirm_service_deletion">אשר מחיקת שירות</string>
- <string name="click_again_for_backup">לחץ שוב לגיבוי</string>
- <string name="service_type">סוג שירות</string>
- <string name="auth_cookie">עוגיית אימות</string>
- <string name="copy_cookie_to_clipboard">העתק עוגייה ללוח עריכה</string>
- <string name="auth_cookie_was_not_configured">עוגיית אימות לא הוגדרה</string>
- <string name="please_restart_Orbot_to_enable_the_changes">אנא הפעל מחדש את Orbot כדי לאפשר את השינויים</string>
- <string name="client_cookies">עוגיות לקוח</string>
- <string name="onion">.onion</string>
- <string name="cookie_from_QR">קרא מתוך QR</string>
- <string name="backup_cookie">גבה עוגייה</string>
- <string name="delete_cookie">מחק עוגייה</string>
- <string name="confirm_cookie_deletion">אשר מחיקת עוגייה</string>
- <string name="hosted_services">שירותים מאורחים</string>
- <string name="share_as_qr">שתף בתור QR</string>
- <string name="disable">השבת</string>
- <string name="enable">אפשר</string>
- <string name="consider_disable_battery_optimizations">שקול להשבית מיטובי סוללה</string>
- <string name="consider_enable_battery_optimizations">שקול לאפשר מיטובי סוללה</string>
- <string name="pref_isolate_dest">בודד כתובות יעד</string>
- <string name="pref_isolate_dest_summary">השתמש במעגל שונה לכל כתובת יעד</string>
- <string name="pref_connection_padding">ריפוד חיבור</string>
- <string name="pref_connection_padding_summary">אפשר תמיד ריפוד חיבור כדי להגן מפני צורות מסוימות של ניתוח תעבורה. ברירת מחדל: אוטומטי</string>
- <string name="pref_reduced_connection_padding">הופחת ריפוד חיבור</string>
- <string name="pref_reduced_connection_padding_summary">סוגר חיבורי ממסר מוקדם יותר ושולח פחות חבילות מידע ריפוד כדי להפחית שימוש של נתונים וסוללה.</string>
- <string name="app_shortcuts">יישומים מאופשרי־Tor</string>
- <string name="testing_bridges">בוחן חיבור גשר אל Tor...</string>
- <string name="testing_bridges_success">הצלחה. תצורת הגשר טובה!</string>
- <string name="testing_bridges_fail">נכשל. נסה אפשרות אחרת</string>
- <string name="bridge_direct_connect">התחבר ישירות אל Tor (הכי טוב)</string>
- <string name="bridge_community">התחבר באמצעות שרתי קהילה</string>
- <string name="bridge_cloud">התחבר באמצעות שרתי ענן</string>
- <string name="trouble_connecting">בעית התחברות?</string>
- <string name="full_device_vpn">VPN מכשיר מלא</string>
- <string name="vpn_disabled">VPN מושבת</string>
-</resources>
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
deleted file mode 100644
index 14e5794d..00000000
--- a/app/src/main/res/values-he/strings.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="app_name">Orbot</string>
- <string name="app_description">Orbot הוא יישום חינמי של יפוי־כוח המעצים יישומים אחרים להשתמש באינטרנט יותר בבטחה. Orbot משתמש ב-Tor כדי להצפין את תעבורת האינטרנט שלך ואז מסתיר אותה באמצעות הקפצה דרך סדרת מחשבים ברחבי העולם. Tor הוא תוכנה חינמית ורשת פתוחה העוזרת לך להתגונן מפני צורה של מעקב ברשת המאיים על חירות אישית ופרטיות, פעילויות עסקיות חשאיות, ובטחון מדינה המוכר בשם ניתוח תעבורה.</string>
- <string name="status_starting_up">Orbot מתחיל…</string>
- <string name="status_activated">מחובר לרשת Tor</string>
- <string name="status_disabled">Orbot כבוי</string>
- <string name="status_shutting_down">שירות Tor מתכבה</string>
- <string name="menu_settings">הגדרות</string>
- <string name="menu_log">יומן</string>
- <string name="menu_start">התחל</string>
- <string name="menu_stop">עצור</string>
- <string name="menu_about">אודות</string>
- <string name="main_layout_download">הורדה</string>
- <string name="main_layout_upload">העלאה</string>
- <string name="button_about">אודות</string>
- <string name="menu_exit">יציאה</string>
- <string name="menu_scan">סרוק BridgeQR</string>
- <string name="menu_share_bridge">שתף BridgeQR</string>
- <!--Welcome Wizard strings (DJH)-->
- <string name="wizard_details">פרטים מסוימים של Orbot </string>
- <string name="wizard_details_msg">Orbot הוא יישום מקור־פתוח אשר מכיל את Tor, Obfs4Proxy, BadVPN Tun2Socks, LibEvent ו-Polipo. הוא מספק יפוי־כוח מקומי של HTTP (פתחה 8118) ויפוי־כוח SOCKS (פתחה 9050) לתוך רשת Tor. ל-Orbot יש גם את היכולת, במכשירים עם הרשאת שורש, לשלוח את כל תעבורת האינטרנט באמצעות Tor.</string>
- <!--END Welcome Wizard strings (DJH)-->
- <string name="pref_general_group">כללי</string>
- <string name="pref_start_boot_title">התחל את Orbot בהדלקת המכשיר</string>
- <string name="pref_start_boot_summary">התחל את Orbot והתחבר לרשת Tor אוטומטית כאשר המכשיר נדלק</string>
- <!--New Wizard Strings-->
- <!--Title Screen-->
- <!--Warning screen-->
- <!--Permissions screen-->
- <!--TipsAndTricks screen-->
- <!--Transparent Proxy screen-->
- <string name="pref_node_configuration">הגדרות Node</string>
- <string name="pref_node_configuration_summary">קיימות הגדרות מתקדמות שיכולות להפחית את האנונימיות שלך</string>
- <string name="pref_entrance_node">נקודות כניסה</string>
- <string name="pref_entrance_node_summary">טביעות אצבע, כינויים, ארצות וכתובות עבור המעבר הראשון</string>
- <string name="pref_entrance_node_dialog">הכנס Entrance Nodes</string>
- <string name="pref_allow_background_starts_title">אפשר הפעלה ברקע</string>
- <string name="pref_allow_background_starts_summary">אפשר לכל אפליקציה להפעיל דרך Orbot את Tor ושאר השירותים הקשורים</string>
- <string name="pref_proxy_title">רשת יפוי־כוח יוצאת (רשותי)</string>
- <string name="pref_proxy_type_title">סוג מתווך יוצא</string>
- <string name="pref_proxy_type_summary">פרוטוקול לשימוש עבור שרת יפוי־כוח: HTTP, HTTPS, Socks4, Socks5</string>
- <string name="pref_proxy_type_dialog">הכנס סוג יפוי־כוח</string>
- <string name="pref_proxy_host_title">מארח של Outbound Proxy</string>
- <string name="pref_proxy_host_summary">שם מארח של שרת יפוי־כוח</string>
- <string name="pref_proxy_host_dialog">הכנס מארח יפוי־כוח</string>
- <string name="pref_proxy_port_title">פתחת יפוי־כוח של Outbound</string>
- <string name="pref_proxy_port_summary">פתחת שרת יפוי־כוח</string>
- <string name="pref_proxy_port_dialog">הכנס פתחת יפוי־כוח</string>
- <string name="pref_proxy_username_title">שם משתמש של Outbound Proxy</string>
- <string name="pref_proxy_username_summary">שם משתמש של יפוי־כוח (רשותי)</string>
- <string name="pref_proxy_username_dialog">הכנס שם משתמש של יפוי־כוח</string>
- <string name="pref_proxy_password_title">סיסמא של Outbound Proxy</string>
- <string name="pref_proxy_password_summary">סיסמת יפוי־כוח (רשותי)</string>
- <string name="pref_proxy_password_dialog">הכנס סיסמת יפוי־כוח</string>
- <string name="couldn_t_start_tor_process_">אין אפשרות להתחיל תהליך Tor:</string>
- <string name="error">שגיאה</string>
- <string name="your_reachableaddresses_settings_caused_an_exception_">ההגדרות של הכתובות הנגישות שלך גרמו לחריגה!</string>
- <string name="your_relay_settings_caused_an_exception_">הגדרות הממסר שלך גרמו לחריגה!</string>
- <string name="exit_nodes">צמתי יציאה</string>
- <string name="fingerprints_nicks_countries_and_addresses_for_the_last_hop">טביעות אצבע, כינויים, מדינות וכתובות עבור נקודת הגישור האחרונה</string>
- <string name="enter_exit_nodes">הזן צמתי יציאה</string>
- <string name="exclude_nodes">צמתים מוצאים</string>
- <string name="fingerprints_nicks_countries_and_addresses_to_exclude">טביעות אצבע, כינויים, מדינות וכתובות לשלילה</string>
- <string name="enter_exclude_nodes">הזן צמתים מוצאים</string>
- <string name="strict_nodes">צמתים קפדנים</string>
- <string name="use_only_these_specified_nodes">השתמש *רק* בצמתים מצוינים אלו</string>
- <string name="bridges">גשרים</string>
- <string name="use_bridges">השתמש בגשרים</string>
- <string name="relays">ממסרים</string>
- <string name="relaying">ממסור</string>
- <string name="enable_your_device_to_be_a_non_exit_relay">אפשר למכשיר שלך להיות תחנת ממסר שאיננה יציאה</string>
- <string name="relay_port">פתחת הממסר</string>
- <string name="listening_port_for_your_tor_relay">פתחת האזנה עבור ממסר Tor שלך</string>
- <string name="enter_or_port"> הכנס פתחת OR</string>
- <string name="relay_nickname">כינוי הממסר</string>
- <string name="the_nickname_for_your_tor_relay">הכינוי לממסר Tor שלך</string>
- <string name="enter_a_custom_relay_nickname">הזן כינוי עבור ממסר</string>
- <string name="reachable_addresses">כתובות נגישות</string>
- <string name="run_as_a_client_behind_a_firewall_with_restrictive_policies">הרץ כלקוח תחת חומת אש עם מדינויות מגבילות</string>
- <string name="reachable_ports">פתחות נגישות</string>
- <string name="ports_reachable_behind_a_restrictive_firewall">פתחות נגישות מאוחרי חומת אש מגבילה</string>
- <string name="enter_ports">הכנס פתחות</string>
- <string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">אפשר יומן ניפוי תקלים אל פלט (חייב להשתמש ב-adb או ב-aLogCat כדי להציג)</string>
- <string name="project_home">אתרי הפרויקט:</string>
- <string name="project_urls">https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/…</string>
- <string name="third_party_software">תוכנה-צד-ג׳: </string>
- <string name="tor_version">Tor: https://www.torproject.org</string>
- <string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
- <string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">יישום רוצה לפתוח פתחה של שרת נסתר %1$s אל רשת Tor. זה בטוח אם אתה בוטח ביישום.</string>
- <string name="found_existing_tor_process">נמצא תהליך Tor קיים…</string>
- <string name="something_bad_happened">משהו רע התרחש. בדוק את היומן</string>
- <string name="unable_to_read_hidden_service_name">לא היה ניתן לקרוא שם של שירות נסתר</string>
- <string name="unable_to_start_tor">לא מסוגל להתחיל את Tor:</string>
- <string name="pref_use_persistent_notifications">לשמור תמיד את האיקון בסרגל כלים כשאורבוט מחובר</string>
- <string name="pref_use_persistent_notifications_title">התראות תמיד-פועל</string>
- <string name="pref_use_expanded_notifications">הראה התראה מורחבת עם מדינת יציאה ו-IP יציאה של Tor</string>
- <string name="pref_use_expanded_notifications_title">התראות מורחבות</string>
- <string name="set_locale_title">שפה</string>
- <string name="pref_disable_network_title">אין שינה אוטומטית של רשת</string>
- <string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
- <string name="newnym">החלפת אל זהות Tor חדשה!</string>
- <string name="updating_settings_in_tor_service">מעדכן הגדרות Tor במכשיר</string>
- <string name="pref_socks_title">SOCKS עבור Tor</string>
- <string name="pref_socks_summary">פתחה אשר Tor מציע את יפוי־הכוח SOCKS שלו עליה (ברירת מחדל: 9050 או 0 כדי להשבית)</string>
- <string name="pref_socks_dialog">תצורת פתחות SOCKS</string>
- <string name="pref_transport_title">פתחת Tor TransProxy</string>
- <string name="pref_transport_summary">פתחה אשר Tor מציע את יפוי־הכוח השקוף שלו עליה (ברירת מחדל: 9040 או 0 כדי להשבית)</string>
- <string name="pref_transport_dialog">תצורת פתחות TransProxy</string>
- <string name="pref_dnsport_title">פתחת DNS של Tor</string>
- <string name="pref_dnsport_summary">פתחה אשר Tor מציע את ה-DNS שלו עליה (ברירת מחדל: 5400 או 0 כדי להשבית)</string>
- <string name="pref_dnsport_dialog">תצורה של פתחת DNS</string>
- <string name="pref_torrc_title">תצורה מותאמת אישית של Torrc</string>
- <string name="pref_torrc_summary">מומחים בלבד: הכנס שורות תצורת torrc ישיר</string>
- <string name="pref_torrc_dialog">Torrc מותאם אישית</string>
- <string name="bridges_updated">גשרים עודכנו</string>
- <string name="restart_orbot_to_use_this_bridge_">אנא הפעל מחדש את Orbot כדי לאפשר את השינויים</string>
- <string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">אם פעילות הרשת הניידת שלך חוסמת את Tor, אפשר להשתמש ב‚שרת גישור’ כדרך חלופית להיכנס. יש לבחור באחת האפשרויות כדי להגדיר ולבחון…</string>
- <string name="get_bridges_email">דוא\"ל</string>
- <string name="apps_mode">מצב VPN</string>
- <string name="send_email">שלח דוא\"ל</string>
- <string name="vpn_default_world">עולמי (אוטומטי)</string>
- <string name="hidden_services">שירותים נסתרים</string>
- <string name="title_activity_hidden_services">שירותים נסתרים</string>
- <string name="menu_hidden_services">שירותים נסתרים</string>
- <string name="save">שמור את</string>
- <string name="local_port">פתחה מקומית</string>
- <string name="onion_port">פתחת בצל</string>
- <string name="name">שם</string>
- <string name="done">הסתיים!</string>
- <string name="copy_address_to_clipboard">העתק כתובת ללוח עריכה</string>
- <string name="show_auth_cookie">הראה עוגיית אימות</string>
- <string name="backup_service">גבה שירות</string>
- <string name="delete_service">מחק שירות</string>
- <string name="backup_saved_at_external_storage">גיבוי נשמר באחסון חיצוני</string>
- <string name="backup_restored">גיבוי שוחזר</string>
- <string name="restore_backup">שחזר גיבוי</string>
- <string name="create_a_backup_first">צור גיבוי תחילה</string>
- <string name="start_tor_again_for_finish_the_process">הפעל את Tor שוב כדי לסיים את התהליך</string>
- <string name="confirm_service_deletion">אשר מחיקת שירות</string>
- <string name="service_type">סוג שירות</string>
- <string name="auth_cookie">עוגיית אימות</string>
- <string name="copy_cookie_to_clipboard">העתק עוגייה ללוח עריכה</string>
- <string name="auth_cookie_was_not_configured">עוגיית אימות לא הוגדרה</string>
- <string name="please_restart_Orbot_to_enable_the_changes">אנא הפעל מחדש את Orbot כדי לאפשר את השינויים</string>
- <string name="client_cookies">עוגיות לקוח</string>
- <string name="onion">.onion</string>
- <string name="cookie_from_QR">קרא מתוך QR</string>
- <string name="backup_cookie">גבה עוגייה</string>
- <string name="delete_cookie">מחק עוגייה</string>
- <string name="confirm_cookie_deletion">אשר מחיקת עוגייה</string>
- <string name="hosted_services">שירותים מאורחים</string>
- <string name="share_as_qr">שתף בתור QR</string>
- <string name="disable">השבת</string>
- <string name="enable">אפשר</string>
- <string name="consider_disable_battery_optimizations">שקול להשבית מיטובי סוללה</string>
- <string name="consider_enable_battery_optimizations">שקול לאפשר מיטובי סוללה</string>
- <string name="pref_isolate_dest">בודד כתובות יעד</string>
- <string name="pref_isolate_dest_summary">השתמש במעגל שונה לכל כתובת יעד</string>
- <string name="pref_connection_padding">ריפוד חיבור</string>
- <string name="pref_connection_padding_summary">אפשר תמיד ריפוד חיבור כדי להגן מפני צורות מסוימות של ניתוח תעבורה. ברירת מחדל: אוטומטי</string>
- <string name="pref_reduced_connection_padding">הופחת ריפוד חיבור</string>
- <string name="pref_reduced_connection_padding_summary">סוגר חיבורי ממסר מוקדם יותר ושולח פחות חבילות מידע כריפוד כדי להפחית שימוש בנתונים ובסוללה</string>
- <string name="app_shortcuts">יישומים מאופשרי־Tor</string>
- <string name="testing_bridges">בוחן חיבור גשר אל Tor…</string>
- <string name="testing_bridges_success">הצלחה. תצורת הגשר טובה!</string>
- <string name="testing_bridges_fail">נכשל. נסה אפשרות אחרת</string>
- <string name="bridge_direct_connect">התחבר ישירות אל Tor (הכי טוב)</string>
- <string name="bridge_community">התחבר באמצעות שרתי קהילה</string>
- <string name="bridge_cloud">התחבר באמצעות שרתי ענן</string>
- <string name="trouble_connecting">בעית התחברות?</string>
- <string name="full_device_vpn">VPN מכשיר מלא</string>
- <string name="vpn_disabled">VPN מושבת</string>
- <string name="pref_disable_ipv4">השבתת חיבורי IPv4</string>
- <string name="pref_prefer_ipv6">להעדיף חיבורי IPv6</string>
- <string name="pref_http_dialog">הגדרת פתחות של תור</string>
- <string name="pref_http_summary">פתחה שדרכה תור מגיש את מתווך ה־HTTP שלו (בררת מחדל: 8118 או 0 להשבתה)</string>
- <string name="pref_http_title">תור עם HTTP</string>
- <string name="pref_open_proxy_on_all_interfaces_summary">לאפשר עמיתי רשת אלחוטית, מכשירים קשורים ולכל מי שיכול להתחבר ל־IP שלך לגשת לתור</string>
- <string name="pref_open_proxy_on_all_interfaces_title">פתיחת מתווך על כל המנשקים</string>
- <string name="refresh_apps">רענון יישומונים</string>
- <string name="default_socks_http">SOCKS: - HTTP: -</string>
- <string name="app_services">שירותי יישומון</string>
- <string name="user_services">שירותי משתמש</string>
- <string name="menu_new_identity">זהות חדשה</string>
- <string name="pref_disable_ipv4_summary">מספר ליצירת לא להתחבר לכתובות IPv4</string>
- <string name="pref_prefer_ipv6_summary">מספר ליציאות שכתובות IPv6 עדיפות</string>
-</resources>
\ No newline at end of file
diff --git a/lint.xml b/lint.xml
index 4d732fdb..092d430d 100644
--- a/lint.xml
+++ b/lint.xml
@@ -18,6 +18,7 @@
<issue id="HardwareIds" severity="error"/>
<issue id="ImpliedQuantity" severity="error"/>
<issue id="InvalidPackage" severity="error"/>
+ <issue id="LocaleFolder" severity="error"/>>
<issue id="NestedScrolling" severity="error"/>
<issue id="NewApi" severity="error"/>
<issue id="PackageManagerGetSignatures" severity="error"/>
@@ -30,11 +31,4 @@
<issue id="TrustAllX509TrustManager" severity="error"/>
<issue id="Typos" severity="error"/>
<issue id="UnsafeProtectedBroadcastReceiver" severity="error"/>
-
- <!-- both the correct and deprecated locales need to be present for
- them to be recognized on all devices -->
- <issue id="LocaleFolder" severity="error">
- <ignore path="src/main/res/values-he"/>
- <ignore path="src/main/res/values-id"/>
- </issue>
</lint>
diff --git a/orbotservice/src/main/res/values-he/strings.xml b/orbotservice/src/main/res/values-he/strings.xml
deleted file mode 100644
index aa7e87ea..00000000
--- a/orbotservice/src/main/res/values-he/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="app_name">Orbot</string>
- <string name="app_description">Orbot הינה אפליקציית פרוקסי חינמית המאפשרת לאפליקציות אחרות להשתמש באינטרנט בבטחה. Orbot נעזרת ב-Tor כדי להצפין את תעבורת האינטרנט שלך ולהסוותה באמצעותה ניתובה דרך מספר מחשבים ברחבי העולם. Tor היא תוכנה חופשית ורשת פתוחה המסייעת לך להתגונן מפני סוגים מסוימים של אמצעי ניטור ומעקב אחר רשת האינטרנט המאיימים על הפרטיות, החירות האישית, פעילויות עסקיות ומערכות יחסים חשאיות.</string>
- <string name="status_starting_up">Orbot מתחיל…</string>
- <string name="status_activated">מחובר לרשת Tor</string>
- <string name="status_disabled">Orbot כבוי</string>
- <!--Welcome Wizard strings (DJH)-->
- <!--END Welcome Wizard strings (DJH)-->
- <!--New Wizard Strings-->
- <!--Title Screen-->
- <!--Warning screen-->
- <!--Permissions screen-->
- <!--TipsAndTricks screen-->
- <!--Transparent Proxy screen-->
- <string name="couldn_t_start_tor_process_">אין אפשרות להתחיל תהליך Tor:</string>
- <string name="found_existing_tor_process">נמצא תהליך Tor קיים…</string>
- <string name="something_bad_happened">משהו רע התרחש. בדוק את היומן</string>
- <string name="unable_to_read_hidden_service_name">לא מסוגל לקרוא שם שירות נסתר</string>
- <string name="unable_to_start_tor">לא מסוגל להתחיל את Tor:</string>
- <string name="newnym">החלפת אל זהות Tor חדשה!</string>
- <string name="updating_settings_in_tor_service">מעדכן הגדרות Tor במכשיר</string>
-</resources>
1
0
commit c229771b7fbb633842d865f11154ad2884669e44
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Fri Oct 25 22:38:06 2019 +0200
switch to native TorService
Signed-off-by: Hans-Christoph Steiner <hans(a)eds.org>
---
app-mini/build.gradle | 2 +-
app/build.gradle | 5 +-
orbotservice/build.gradle | 6 +-
.../torproject/android/service/OrbotService.java | 408 ++++++---------------
.../android/service/TorServiceConstants.java | 10 -
.../service/util/CustomTorResourceInstaller.java | 72 +---
6 files changed, 133 insertions(+), 370 deletions(-)
diff --git a/app-mini/build.gradle b/app-mini/build.gradle
index dd1914d0..5617f1a0 100644
--- a/app-mini/build.gradle
+++ b/app-mini/build.gradle
@@ -100,8 +100,8 @@ android {
exclude 'lib/arm64-v8a/obfs4proxy.so'
exclude 'lib/armeabi-v7a/obfs4proxy.so'
exclude 'lib/armeabi/obfs4proxy.so'
+ exclude 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version'
}
-
}
diff --git a/app/build.gradle b/app/build.gradle
index 70349b22..8d5e3ea7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -110,8 +110,11 @@ android {
universalApk true
}
}
-}
+ packagingOptions {
+ exclude 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version'
+ }
+}
dependencies {
implementation project(':orbotservice')
diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index f5ef1906..0d6b162e 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -41,11 +41,13 @@ android {
lintConfig file("../lint.xml")
}
+ packagingOptions {
+ exclude 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version'
+ }
}
dependencies {
-
- implementation 'org.torproject:tor-android-binary:0.4.4.6'
+ implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
/**
implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.9'
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
index 6808f088..396881d3 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
@@ -15,12 +15,14 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
+import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
@@ -28,21 +30,16 @@ import android.net.Uri;
import android.net.VpnService;
import android.os.Build;
import android.os.Handler;
+import android.os.HandlerThread;
import android.os.IBinder;
+import android.os.Looper;
import android.provider.BaseColumns;
import android.text.TextUtils;
import android.util.Log;
-import androidx.annotation.RequiresApi;
-import androidx.core.app.NotificationCompat;
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-
-import com.jaredrummler.android.shell.CommandResult;
-
import net.freehaven.tor.control.TorControlCommands;
import net.freehaven.tor.control.TorControlConnection;
-import org.torproject.android.service.util.CustomShell;
import org.torproject.android.service.util.CustomTorResourceInstaller;
import org.torproject.android.service.util.DummyActivity;
import org.torproject.android.service.util.Prefs;
@@ -50,21 +47,19 @@ import org.torproject.android.service.util.TorServiceUtils;
import org.torproject.android.service.util.Utils;
import org.torproject.android.service.vpn.OrbotVpnManager;
import org.torproject.android.service.vpn.VpnPrefs;
+import org.torproject.jni.TorService;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
-import java.net.Socket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -78,12 +73,15 @@ import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
import IPtProxy.IPtProxy;
+import androidx.annotation.RequiresApi;
+import androidx.core.app.NotificationCompat;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
public class OrbotService extends VpnService implements TorServiceConstants, OrbotConstants {
- public final static String BINARY_TOR_VERSION = org.torproject.android.binary.TorServiceConstants.BINARY_TOR_VERSION;
+ public final static String BINARY_TOR_VERSION = TorService.VERSION_NAME;
+
static final int NOTIFY_ID = 1;
- private final static int CONTROL_SOCKET_TIMEOUT = 60000;
private static final int ERROR_NOTIFY_ID = 3;
private static final int HS_NOTIFY_ID = 4;
private static final Uri V2_HS_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers/hs");
@@ -121,14 +119,13 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
V3ClientAuth.HASH,
V3ClientAuth.ENABLED
};
+
public static int mPortSOCKS = -1;
public static int mPortHTTP = -1;
public static int mPortDns = TOR_DNS_PORT_DEFAULT;
public static int mPortTrans = TOR_TRANSPROXY_PORT_DEFAULT;
public static File appBinHome;
public static File appCacheHome;
- public static File fileTor;
- public static File fileTorRc;
private final ExecutorService mExecutor = Executors.newCachedThreadPool();
boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
TorEventHandler mEventHandler;
@@ -139,8 +136,9 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
ActionBroadcastReceiver mActionBroadcastReceiver;
private String mCurrentStatus = STATUS_OFF;
private TorControlConnection conn = null;
- private int mLastProcessId = -1;
- private File fileControlPort, filePid;
+ private ServiceConnection torServiceConnection;
+ private TorService torService;
+ private boolean shouldUnbindTorService;
private NotificationManager mNotificationManager = null;
private NotificationCompat.Builder mNotifyBuilder;
private boolean mNotificationShowing = false;
@@ -187,22 +185,6 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
showToolbarNotification(getString(R.string.status_activated), NOTIFY_ID, R.drawable.ic_stat_tor);
}
- private boolean findExistingTorDaemon() {
- try {
- mLastProcessId = initControlConnection(1, true);
-
- if (mLastProcessId != -1 && conn != null) {
- sendCallbackLogMessage(getString(R.string.found_existing_tor_process));
- sendCallbackStatus(STATUS_ON);
- showConnectedToTorNetworkNotification();
- return true;
- }
- } catch (Exception e) {
- debug("Error finding existing tor daemon: " + e);
- }
- return false;
- }
-
@Override
public void onLowMemory() {
super.onLowMemory();
@@ -283,7 +265,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
showToolbarNotification("", NOTIFY_ID, R.drawable.ic_stat_tor);
if (intent != null)
- exec(new IncomingIntentRouter(intent));
+ mExecutor.execute(new IncomingIntentRouter(intent));
else
Log.d(OrbotConstants.TAG, "Got null onStartCommand() intent");
@@ -342,6 +324,13 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}).start();
}
+ private void stopTorOnError(String message) {
+ stopTorAsync();
+ showToolbarNotification(
+ getString(R.string.unable_to_start_tor) + ": " + message,
+ ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
+ }
+
private static boolean useIPtObfsMeekProxy() {
String bridgeList = Prefs.getBridgesList();
return bridgeList.contains("obfs") || bridgeList.contains("meek");
@@ -438,6 +427,11 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
Log.d(OrbotConstants.TAG, "error shutting down Tor via connection", e);
}
+ if (shouldUnbindTorService) {
+ unbindService(torServiceConnection);
+ shouldUnbindTorService = false;
+ }
+
conn = null;
break;
}
@@ -491,10 +485,6 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (!appCacheHome.exists())
appCacheHome.mkdirs();
- fileTorRc = new File(appBinHome, TORRC_ASSET_KEY);
- fileControlPort = new File(getFilesDir(), TOR_CONTROL_PORT_FILE);
- filePid = new File(getFilesDir(), TOR_PID_FILE);
-
mHSBasePath = new File(getFilesDir().getAbsolutePath(), TorServiceConstants.HIDDEN_SERVICES_DIR);
if (!mHSBasePath.isDirectory())
mHSBasePath.mkdirs();
@@ -525,20 +515,11 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (Build.VERSION.SDK_INT >= 26)
createNotificationChannel();
- torUpgradeAndConfig();
+ CustomTorResourceInstaller installer = new CustomTorResourceInstaller(this, appBinHome);
+ installer.installGeoIP();
pluggableTransportInstall();
- new Thread(() -> {
- try {
- findExistingTorDaemon();
- } catch (Exception e) {
- Log.e(OrbotConstants.TAG, "error onBind", e);
- logNotice("error finding exiting process: " + e.toString());
- }
-
- }).start();
-
mVpnManager = new OrbotVpnManager(this);
loadCdnFronts(this);
@@ -568,37 +549,12 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
return false;
}
- private boolean torUpgradeAndConfig() throws IOException, TimeoutException {
-
- SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
- String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED, null);
-
- logNotice("checking binary version: " + version);
-
- CustomTorResourceInstaller installer = new CustomTorResourceInstaller(this, appBinHome);
- logNotice("upgrading binaries to latest version: " + BINARY_TOR_VERSION);
-
- fileTor = installer.installResources();
-
- if (fileTor != null && fileTor.canExecute()) {
- prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED, BINARY_TOR_VERSION).apply();
-
- fileTorRc = new File(appBinHome, "torrc");//installer.getTorrcFile();
- return fileTorRc.exists();
- }
-
- return false;
- }
-
private File updateTorrcCustomFile() throws IOException, TimeoutException {
SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
StringBuffer extraLines = new StringBuffer();
extraLines.append("\n");
- extraLines.append("ControlPortWriteToFile").append(' ').append(fileControlPort.getCanonicalPath()).append('\n');
-
- extraLines.append("PidFile").append(' ').append(filePid.getCanonicalPath()).append('\n');
extraLines.append("RunAsDaemon 0").append('\n');
extraLines.append("AvoidDiskWrites 0").append('\n');
@@ -692,15 +648,9 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
debug("torrc.custom=" + extraLines.toString());
- File fileTorRcCustom = new File(fileTorRc.getAbsolutePath() + ".custom");
- boolean success = updateTorConfigCustom(fileTorRcCustom, extraLines.toString());
-
- if (success && fileTorRcCustom.exists()) {
- logNotice("success.");
- return fileTorRcCustom;
- } else
- return null;
-
+ File fileTorRcCustom = TorService.getTorrc(this);
+ updateTorConfigCustom(fileTorRcCustom, extraLines.toString());
+ return fileTorRcCustom;
}
private String checkPortOrAuto(String portString) {
@@ -771,36 +721,17 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
// these states should probably be handled better
sendCallbackLogMessage("Ignoring start request, currently " + mCurrentStatus);
return;
- } else if (mCurrentStatus.equals(STATUS_ON) && (mLastProcessId != -1)) {
+ } else if (mCurrentStatus.equals(STATUS_ON)) {
showConnectedToTorNetworkNotification();
sendCallbackLogMessage("Ignoring start request, already started.");
- // setTorNetworkEnabled (true);
-
return;
}
sendCallbackStatus(STATUS_STARTING);
- try {
- if (conn != null) {
- String torProcId = conn.getInfo("process/pid");
- if (!TextUtils.isEmpty(torProcId))
- mLastProcessId = Integer.parseInt(torProcId);
- } else {
- if (fileControlPort != null && fileControlPort.exists())
- findExistingTorDaemon();
-
- }
- } catch (Exception e) {
- }
-
// make sure there are no stray daemons running
stopTorDaemon(false);
- SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
- String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED, null);
- logNotice("checking binary version: " + version);
-
showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.ic_stat_tor);
//sendCallbackLogMessage(getString(R.string.status_starting_up));
//logNotice(getString(R.string.status_starting_up));
@@ -812,27 +743,20 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnManager.sSocksProxyLocalhost + ":" + OrbotVpnManager.sSocksProxyServerPort);
}
- boolean success = runTorShellCmd();
-
- if (success) {
- try {
- updateLegacyV2OnionNames();
- } catch (SecurityException se) {
- logNotice("unable to upload legacy v2 onion names");
- }
- try {
- updateV3OnionNames();
- } catch (SecurityException se) {
- logNotice("unable to upload v3 onion names");
- }
+ runTorShellCmd();
+ try {
+ updateLegacyV2OnionNames();
+ } catch (SecurityException se) {
+ logNotice("unable to upload legacy v2 onion names");
+ }
+ try {
+ updateV3OnionNames();
+ } catch (SecurityException se) {
+ logNotice("unable to upload v3 onion names");
}
-
} catch (Exception e) {
logException("Unable to start Tor: " + e.toString(), e);
- stopTorAsync();
- showToolbarNotification(
- getString(R.string.unable_to_start_tor) + ": " + e.getMessage(),
- ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
+ stopTorOnError(e.getLocalizedMessage());
}
}
@@ -913,131 +837,80 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
}
- private boolean runTorShellCmd() throws Exception {
- File fileTorrcCustom = updateTorrcCustomFile();
-
- //make sure Tor exists and we can execute it
- if (fileTor == null || (!fileTor.exists()) || (!fileTor.canExecute()))
- return false;
-
- if ((!fileTorRc.exists()) || (!fileTorRc.canRead()))
- return false;
+ private void runTorShellCmd() throws Exception {
+ updateTorConfigCustom(TorService.getDefaultsTorrc(this),
+ "DNSPort 0\n" +
+ "TransPort 0\n" +
+ "DisableNetwork 1\n");
+ File fileTorrcCustom = updateTorrcCustomFile();
if ((!fileTorrcCustom.exists()) || (!fileTorrcCustom.canRead()))
- return false;
+ return;
sendCallbackLogMessage(getString(R.string.status_starting_up));
- String torCmdString = fileTor.getAbsolutePath()
- + " DataDirectory " + appCacheHome.getAbsolutePath()
- + " --defaults-torrc " + fileTorRc.getAbsolutePath()
- + " -f " + fileTorrcCustom.getAbsolutePath();
-
- int exitCode;
-
- try {
- exitCode = exec(torCmdString + " --verify-config", true);
- } catch (Exception e) {
- logNotice("Tor configuration did not verify: " + e.getMessage());
- return false;
- }
-
- if (exitCode == 0) {
- logNotice("Tor configuration VERIFIED.");
- try {
- exitCode = exec(torCmdString, false);
- } catch (Exception e) {
- logNotice("Tor was unable to start: " + e.getMessage());
- throw new Exception("Tor was unable to start: " + e.getMessage());
+ torServiceConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
+ torService = ((TorService.LocalBinder) iBinder).getService();
+ conn = torService.getTorControlConnection();
+ addEventHandler();
}
- if (exitCode != 0) {
- logNotice("Tor did not start. Exit:" + exitCode);
- return false;
+ @Override
+ public void onServiceDisconnected(ComponentName componentName) {
+ conn = null;
+ torService = null;
}
- //now try to connect
- mLastProcessId = initControlConnection(10, false);
+ @Override
+ public void onNullBinding(ComponentName componentName) {
+ stopTorOnError("Tor was unable to start: " + "onNullBinding");
+ conn = null;
+ torService = null;
+ }
- if (mLastProcessId == -1) {
- logNotice(getString(R.string.couldn_t_start_tor_process_) + "; exit=" + exitCode);
- throw new Exception(getString(R.string.couldn_t_start_tor_process_) + "; exit=" + exitCode);
- } else {
- logNotice("Tor started; process id=" + mLastProcessId);
+ @Override
+ public void onBindingDied(ComponentName componentName) {
+ stopTorOnError("Tor was unable to start: " + "onBindingDied");
+ conn = null;
+ torService = null;
+ }
+ };
+
+ BroadcastReceiver receiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (TorService.ACTION_STATUS.equals(intent.getAction())
+ && TorService.STATUS_ON.equals(intent.getStringExtra(TorService.EXTRA_STATUS))) {
+ initControlConnection();
+ unregisterReceiver(this);
+ }
}
+ };
+ // run the BroadcastReceiver in its own thread
+ HandlerThread handlerThread = new HandlerThread(receiver.getClass().getSimpleName());
+ handlerThread.start();
+ Looper looper = handlerThread.getLooper();
+ Handler handler = new Handler(looper);
+ registerReceiver(receiver, new IntentFilter(TorService.ACTION_STATUS), null, handler);
+
+ Intent serviceIntent = new Intent(this, TorService.class);
+ if (Build.VERSION.SDK_INT < 29) {
+ shouldUnbindTorService = bindService(serviceIntent, torServiceConnection, BIND_AUTO_CREATE);
+ } else {
+ shouldUnbindTorService = bindService(serviceIntent, BIND_AUTO_CREATE, mExecutor, torServiceConnection);
}
-
- return true;
}
protected void exec(Runnable runn) {
mExecutor.execute(runn);
}
- private int exec(String cmd, boolean wait) throws Exception {
- HashMap<String, String> mapEnv = new HashMap<>();
- mapEnv.put("HOME", appBinHome.getAbsolutePath());
-
- CommandResult result = CustomShell.run("sh", wait, mapEnv, cmd);
- debug("executing: " + cmd);
- debug("stdout: " + result.getStdout());
- debug("stderr: " + result.getStderr());
-
- return result.exitCode;
- }
-
- private int initControlConnection(int maxTries, boolean isReconnect) throws Exception {
- int controlPort = -1;
- int attempt = 0;
-
- logNotice(getString(R.string.waiting_for_control_port));
-
- while (conn == null && attempt++ < maxTries && (!mCurrentStatus.equals(STATUS_OFF))) {
- try {
- controlPort = getControlPort();
- if (controlPort != -1) {
- logNotice(getString(R.string.connecting_to_control_port) + controlPort);
- break;
- }
-
- } catch (Exception ce) {
- conn = null;
- // logException( "Error connecting to Tor local control port: " + ce.getMessage(),ce);
- }
-
- try {
- // logNotice("waiting...");
- Thread.sleep(2000);
- } catch (Exception e) {
- }
- }
-
- if (controlPort != -1) {
- Socket torConnSocket = new Socket(IP_LOCALHOST, controlPort);
- torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
- conn = new TorControlConnection(torConnSocket);
- conn.launchThread(true);//is daemon
- }
-
+ private void initControlConnection() {
if (conn != null) {
logNotice("SUCCESS connected to Tor control port.");
-
- File fileCookie = new File(appCacheHome, TOR_CONTROL_COOKIE);
-
- if (fileCookie.exists()) {
- logNotice("adding control port event handler");
-
- conn.setEventHandler(mEventHandler);
-
- logNotice("SUCCESS added control port event handler");
- byte[] cookie = new byte[(int) fileCookie.length()];
- DataInputStream fis = new DataInputStream(new FileInputStream(fileCookie));
- fis.read(cookie);
- fis.close();
- conn.authenticate(cookie);
-
- logNotice("SUCCESS - authenticated to control port.");
-
+ try {
// conn.setEvents(Arrays.asList(new String[]{"DEBUG","STATUS_CLIENT","STATUS_GENERAL","BW"}));
if (Prefs.useDebugLogging())
@@ -1047,8 +920,6 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
// sendCallbackLogMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete));
- String torProcId = conn.getInfo("process/pid");
-
String confSocks = conn.getInfo("net/listeners/socks");
StringTokenizer st = new StringTokenizer(confSocks, " ");
@@ -1081,76 +952,12 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
- setTorNetworkEnabled(true);
-
- return Integer.parseInt(torProcId);
- } else {
- logNotice("Tor authentication cookie does not exist yet");
+ } catch (IOException e) {
+ e.printStackTrace();
+ stopTorOnError(e.getLocalizedMessage());
conn = null;
-
- }
- }
-
- throw new Exception("Tor control port could not be found");
- }
-
- private int getControlPort() {
- int result = -1;
-
- try {
- if (fileControlPort.exists()) {
- debug("Reading control port config file: " + fileControlPort.getCanonicalPath());
- BufferedReader bufferedReader = new BufferedReader(new FileReader(fileControlPort));
- String line = bufferedReader.readLine();
-
- if (line != null) {
- String[] lineParts = line.split(":");
- result = Integer.parseInt(lineParts[1]);
- }
-
-
- bufferedReader.close();
-
- //store last valid control port
- SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
- prefs.edit().putInt("controlport", result).apply();
- } else {
- debug("Control Port config file does not yet exist (waiting for tor): " + fileControlPort.getCanonicalPath());
}
- } catch (FileNotFoundException e) {
- debug("unable to get control port; file not found");
- } catch (Exception e) {
- debug("unable to read control port config file");
- }
-
- return result;
- }
-
- public String getInfo(String key) {
- try {
- if (conn != null) {
- return conn.getInfo(key);
- }
- } catch (Exception ioe) {
- // Log.e(TAG,"Unable to get Tor information",ioe);
- logNotice("Unable to get Tor information" + ioe.getMessage());
- }
- return null;
- }
-
- public void setTorNetworkEnabled(final boolean isEnabled) throws IOException {
- if (conn != null) { // it is possible to not have a connection yet, and someone might try to newnym
- new Thread() {
- public void run() {
- try {
- final String newValue = isEnabled ? "0" : "1";
- conn.setConf("DisableNetwork", newValue);
- } catch (Exception ioe) {
- debug("error requesting newnym: " + ioe.getLocalizedMessage());
- }
- }
- }.start();
}
}
@@ -1161,6 +968,19 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
} catch (IOException e) {
debug("error send active: " + e.getLocalizedMessage());
}
+ }
+ }
+
+ public void addEventHandler() {
+ try {
+ logNotice("adding control port event handler");
+ conn.setEventHandler(mEventHandler);
+ conn.setEvents(Arrays.asList("ORCONN", "CIRC", "NOTICE", "WARN", "ERR", "BW"));
+ logNotice("SUCCESS added control port event handler");
+ } catch (IOException e) {
+ e.printStackTrace();
+ stopTorOnError(e.getLocalizedMessage());
+ conn = null;
}
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
index e69d8ba6..d2dc4877 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
@@ -9,14 +9,6 @@ public interface TorServiceConstants {
String DIRECTORY_TOR_DATA = "tordata";
- String TOR_CONTROL_PORT_FILE = "control.txt";
- String TOR_PID_FILE = "torpid";
-
- //torrc (tor config file)
- String TORRC_ASSET_KEY = "torrc";
-
- String TOR_CONTROL_COOKIE = "control_auth_cookie";
-
//geoip data file asset key
String GEOIP_ASSET_KEY = "geoip";
String GEOIP6_ASSET_KEY = "geoip6";
@@ -106,8 +98,6 @@ public interface TorServiceConstants {
String CMD_SET_EXIT = "setexit";
String CMD_ACTIVE = "ACTIVE";
- String PREF_BINARY_TOR_VERSION_INSTALLED = "BINARY_TOR_VERSION_INSTALLED";
-
//obfsproxy
String OBFSCLIENT_ASSET_KEY = "obfs4proxy";
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
index 8bec9ccc..b39b6ae7 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
@@ -4,27 +4,27 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.util.Log;
-import org.torproject.android.binary.TorServiceConstants;
-
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.util.concurrent.TimeoutException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
-public class CustomTorResourceInstaller implements TorServiceConstants {
+public class CustomTorResourceInstaller {
+
+ private static final String TAG = "CustomTorResourceInstaller";
+ String COMMON_ASSET_KEY = "common/";
+
+ //geoip data file asset key
+ String GEOIP_ASSET_KEY = "geoip";
+ String GEOIP6_ASSET_KEY = "geoip6";
private File installFolder;
private Context context;
- private File fileTorrc;
- private File fileTor;
-
public CustomTorResourceInstaller(Context context, File installFolder) {
this.installFolder = installFolder;
this.context = context;
@@ -40,7 +40,7 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
* Write the inputstream contents to the file
*/
private static boolean streamToFile(InputStream stm, File outFile, boolean append, boolean zip) throws IOException {
- byte[] buffer = new byte[FILE_WRITE_BUFFER_SIZE];
+ byte[] buffer = new byte[1024];
int bytecount;
@@ -101,64 +101,12 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
//
/*
* Extract the Tor resources from the APK file using ZIP
- *
- * @File path to the Tor executable
*/
- public File installResources() throws IOException, TimeoutException {
-
- fileTor = new File(installFolder, TOR_ASSET_KEY);
-
+ public void installGeoIP() throws IOException {
if (!installFolder.exists())
installFolder.mkdirs();
-
- installGeoIP();
- fileTorrc = assetToFile(COMMON_ASSET_KEY + TORRC_ASSET_KEY, TORRC_ASSET_KEY, false, false);
-
- File fileNativeDir = new File(getNativeLibraryDir(context));
- fileTor = new File(fileNativeDir, TOR_ASSET_KEY + ".so");
-
- if (fileTor.exists()) {
- if (fileTor.canExecute())
- return fileTor;
- else {
- setExecutable(fileTor);
-
- if (fileTor.canExecute())
- return fileTor;
- }
- }
-
- File fileTorBin = new File(installFolder, TOR_BINARY_KEY);
-
- //it exists but we can't execute it, so copy it to a new path
- if (fileTor.exists()) {
- InputStream is = new FileInputStream(fileTor);
- streamToFile(is, fileTorBin, false, true);
- setExecutable(fileTorBin);
-
- if (fileTorBin.exists() && fileTorBin.canExecute())
- return fileTorBin;
- }
-
- //let's try another approach
- fileTor = CustomNativeLoader.loadNativeBinary(context, TOR_ASSET_KEY, fileTorBin);
-
- if (fileTor != null && fileTor.exists())
- setExecutable(fileTor);
-
- if (fileTor != null && fileTor.exists() && fileTor.canExecute())
- return fileTor;
-
- return null;
- }
-
- private boolean installGeoIP() throws IOException {
-
assetToFile(COMMON_ASSET_KEY + GEOIP_ASSET_KEY, GEOIP_ASSET_KEY, false, false);
-
assetToFile(COMMON_ASSET_KEY + GEOIP6_ASSET_KEY, GEOIP6_ASSET_KEY, false, false);
-
- return true;
}
/*
1
0

[orbot/master] switch to new jtorctl version to support TorService
by n8fr8@torproject.org 22 Dec '21
by n8fr8@torproject.org 22 Dec '21
22 Dec '21
commit 2c9e02bdb76d3501ae7e632c03b5e679b879f463
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Wed Dec 18 11:38:28 2019 +0100
switch to new jtorctl version to support TorService
---
.gitmodules | 4 ----
external/jtorctl | 1 -
orbotservice/build.gradle | 2 +-
3 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/.gitmodules b/.gitmodules
index 691efaad..0ddb14e6 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
-[submodule "external/jtorctl"]
- path = external/jtorctl
- url = https://github.com/guardianproject/jtorctl
- ignore = dirty
[submodule "external/badvpn"]
path = external/badvpn
url = https://github.com/guardianproject/badvpn.git
diff --git a/external/jtorctl b/external/jtorctl
deleted file mode 160000
index 9f8affff..00000000
--- a/external/jtorctl
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 9f8affffbb03737b5606212c3ade9a1114df755f
diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index 58ea078d..f5ef1906 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -62,7 +62,7 @@ dependencies {
implementation 'com.offbynull.portmapper:portmapper:2.0.5'
- implementation 'info.guardianproject:jtorctl:0.4'
+ api 'info.guardianproject:jtorctl:0.4'
implementation 'com.github.tladesignz:IPtProxy:0.5.2'
}
1
0

[orbot/master] put all Control Port event registration onServiceConnected()
by n8fr8@torproject.org 22 Dec '21
by n8fr8@torproject.org 22 Dec '21
22 Dec '21
commit 374e093cd66f05bb477f193f3f71ed85cb540c40
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Thu Apr 15 15:09:10 2021 +0200
put all Control Port event registration onServiceConnected()
---
.../torproject/android/service/OrbotService.java | 65 +++++++++++-----------
1 file changed, 33 insertions(+), 32 deletions(-)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
index 24594ae9..5077ed6c 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
@@ -497,8 +497,6 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (!mV3AuthBasePath.isDirectory())
mV3AuthBasePath.mkdirs();
- mEventHandler = new TorEventHandler(this);
-
if (mNotificationManager == null) {
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
@@ -853,14 +851,43 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
torService = ((TorService.LocalBinder) iBinder).getService();
- conn = torService.getTorControlConnection();
- addEventHandler();
+ try {
+ conn = torService.getTorControlConnection();
+ while (conn == null) {
+ Log.v(TAG, "Waiting for Tor Control Connection...");
+ Thread.sleep(500);
+ conn = torService.getTorControlConnection();
+ }
+ mEventHandler = new TorEventHandler(OrbotService.this);
+ logNotice("adding control port event handler");
+ conn.setEventHandler(mEventHandler);
+ ArrayList<String> events = new ArrayList<>(Arrays.asList(
+ TorControlCommands.EVENT_OR_CONN_STATUS,
+ TorControlCommands.EVENT_CIRCUIT_STATUS,
+ TorControlCommands.EVENT_NOTICE_MSG,
+ TorControlCommands.EVENT_WARN_MSG,
+ TorControlCommands.EVENT_ERR_MSG,
+ TorControlCommands.EVENT_BANDWIDTH_USED,
+ TorControlCommands.EVENT_NEW_DESC,
+ TorControlCommands.EVENT_ADDRMAP));
+ if (Prefs.useDebugLogging()) {
+ events.add(TorControlCommands.EVENT_DEBUG_MSG);
+ events.add(TorControlCommands.EVENT_INFO_MSG);
+ }
+ conn.setEvents(events);
+ logNotice("SUCCESS added control port event handler");
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ stopTorOnError(e.getLocalizedMessage());
+ conn = null;
+ }
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
conn = null;
torService = null;
+ mEventHandler = null;
}
@Override
@@ -868,6 +895,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
stopTorOnError("Tor was unable to start: " + "onNullBinding");
conn = null;
torService = null;
+ mEventHandler = null;
}
@Override
@@ -875,6 +903,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
stopTorOnError("Tor was unable to start: " + "onBindingDied");
conn = null;
torService = null;
+ mEventHandler = null;
}
};
@@ -911,15 +940,6 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (conn != null) {
logNotice("SUCCESS connected to Tor control port.");
try {
- // conn.setEvents(Arrays.asList(new String[]{"DEBUG","STATUS_CLIENT","STATUS_GENERAL","BW"}));
-
- if (Prefs.useDebugLogging())
- conn.setEvents(Arrays.asList("CIRC", "STREAM", "ORCONN", "BW", "INFO", "NOTICE", "WARN", "DEBUG", "ERR", "NEWDESC", "ADDRMAP"));
- else
- conn.setEvents(Arrays.asList("CIRC", "STREAM", "ORCONN", "BW", "NOTICE", "ERR", "NEWDESC", "ADDRMAP"));
-
- // sendCallbackLogMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete));
-
String confSocks = conn.getInfo("net/listeners/socks");
StringTokenizer st = new StringTokenizer(confSocks, " ");
@@ -968,25 +988,6 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
} catch (IOException e) {
debug("error send active: " + e.getLocalizedMessage());
}
- }
- }
-
- public void addEventHandler() {
- try {
- logNotice("adding control port event handler");
- conn.setEventHandler(mEventHandler);
- conn.setEvents(Arrays.asList(
- TorControlCommands.EVENT_OR_CONN_STATUS,
- TorControlCommands.EVENT_CIRCUIT_STATUS,
- TorControlCommands.EVENT_NOTICE_MSG,
- TorControlCommands.EVENT_WARN_MSG,
- TorControlCommands.EVENT_ERR_MSG,
- TorControlCommands.EVENT_BANDWIDTH_USED));
- logNotice("SUCCESS added control port event handler");
- } catch (IOException e) {
- e.printStackTrace();
- stopTorOnError(e.getLocalizedMessage());
- conn = null;
}
}
1
0

22 Dec '21
commit afb3ae786b37722d5e3c699ad65af08eacdda5d2
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Fri Dec 13 22:39:28 2019 +0100
use new jtorctl constants for Tor event names
These include javadoc with links to the documentation.
---
.../main/java/org/torproject/android/service/OrbotService.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
index 844da292..24594ae9 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
@@ -975,7 +975,13 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
try {
logNotice("adding control port event handler");
conn.setEventHandler(mEventHandler);
- conn.setEvents(Arrays.asList("ORCONN", "CIRC", "NOTICE", "WARN", "ERR", "BW"));
+ conn.setEvents(Arrays.asList(
+ TorControlCommands.EVENT_OR_CONN_STATUS,
+ TorControlCommands.EVENT_CIRCUIT_STATUS,
+ TorControlCommands.EVENT_NOTICE_MSG,
+ TorControlCommands.EVENT_WARN_MSG,
+ TorControlCommands.EVENT_ERR_MSG,
+ TorControlCommands.EVENT_BANDWIDTH_USED));
logNotice("SUCCESS added control port event handler");
} catch (IOException e) {
e.printStackTrace();
1
0

[orbot/master] purge unused test code, including old copy of jtorctl
by n8fr8@torproject.org 22 Dec '21
by n8fr8@torproject.org 22 Dec '21
22 Dec '21
commit df577415d44043312e759f4b8cf2334bfd2679d2
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Fri Dec 13 22:40:00 2019 +0100
purge unused test code, including old copy of jtorctl
---
.../java/org/torproject/android/control/.cvsignore | 1 -
.../java/org/torproject/android/control/Bytes.java | 114 ----
.../torproject/android/control/ConfigEntry.java | 20 -
.../torproject/android/control/EventHandler.java | 75 ---
.../torproject/android/control/PasswordDigest.java | 98 ---
.../java/org/torproject/android/control/README | 4 -
.../android/control/TorControlCommands.java | 148 -----
.../android/control/TorControlConnection.java | 730 ---------------------
.../android/control/TorControlError.java | 39 --
.../android/control/TorControlSyntaxError.java | 16 -
.../torproject/android/control/examples/.cvsignore | 1 -
.../control/examples/DebuggingEventHandler.java | 44 --
.../torproject/android/control/examples/Main.java | 146 -----
.../android/service/ExampleUnitTest.java | 15 -
14 files changed, 1451 deletions(-)
diff --git a/orbotservice/src/test/java/org/torproject/android/control/.cvsignore b/orbotservice/src/test/java/org/torproject/android/control/.cvsignore
deleted file mode 100644
index 6b468b62..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.class
diff --git a/orbotservice/src/test/java/org/torproject/android/control/Bytes.java b/orbotservice/src/test/java/org/torproject/android/control/Bytes.java
deleted file mode 100644
index e754d907..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/Bytes.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Static class to do bytewise structure manipulation in Java.
- */
-/* XXXX There must be a better way to do most of this.
- * XXXX The string logic here uses default encoding, which is stupid.
- */
-final class Bytes {
-
- /** Write the two-byte value in 's' into the byte array 'ba', starting at
- * the index 'pos'. */
- public static void setU16(byte[] ba, int pos, short s) {
- ba[pos] = (byte)((s >> 8) & 0xff);
- ba[pos+1] = (byte)((s ) & 0xff);
- }
-
- /** Write the four-byte value in 'i' into the byte array 'ba', starting at
- * the index 'pos'. */
- public static void setU32(byte[] ba, int pos, int i) {
- ba[pos] = (byte)((i >> 24) & 0xff);
- ba[pos+1] = (byte)((i >> 16) & 0xff);
- ba[pos+2] = (byte)((i >> 8) & 0xff);
- ba[pos+3] = (byte)((i ) & 0xff);
- }
-
- /** Return the four-byte value starting at index 'pos' within 'ba' */
- public static int getU32(byte[] ba, int pos) {
- return
- ((ba[pos ]&0xff)<<24) |
- ((ba[pos+1]&0xff)<<16) |
- ((ba[pos+2]&0xff)<< 8) |
- ((ba[pos+3]&0xff));
- }
-
- public static String getU32S(byte[] ba, int pos) {
- return String.valueOf( (getU32(ba,pos))&0xffffffffL );
- }
-
- /** Return the two-byte value starting at index 'pos' within 'ba' */
- public static int getU16(byte[] ba, int pos) {
- return
- ((ba[pos ]&0xff)<<8) |
- ((ba[pos+1]&0xff));
- }
-
- /** Return the string starting at position 'pos' of ba and extending
- * until a zero byte or the end of the string. */
- public static String getNulTerminatedStr(byte[] ba, int pos) {
- int len, maxlen = ba.length-pos;
- for (len=0; len<maxlen; ++len) {
- if (ba[pos+len] == 0)
- break;
- }
- return new String(ba, pos, len);
- }
-
- /**
- * Read bytes from 'ba' starting at 'pos', dividing them into strings
- * along the character in 'split' and writing them into 'lst'
- */
- public static void splitStr(List<String> lst, byte[] ba, int pos, byte split) {
- while (pos < ba.length && ba[pos] != 0) {
- int len;
- for (len=0; pos+len < ba.length; ++len) {
- if (ba[pos+len] == 0 || ba[pos+len] == split)
- break;
- }
- if (len>0)
- lst.add(new String(ba, pos, len));
- pos += len;
- if (ba[pos] == split)
- ++pos;
- }
- }
-
- /**
- * Read bytes from 'ba' starting at 'pos', dividing them into strings
- * along the character in 'split' and writing them into 'lst'
- */
- public static List<String> splitStr(List<String> lst, String str) {
- // split string on spaces, include trailing/leading
- String[] tokenArray = str.split(" ", -1);
- if (lst == null) {
- lst = Arrays.asList( tokenArray );
- } else {
- lst.addAll( Arrays.asList( tokenArray ) );
- }
- return lst;
- }
-
- private static final char[] NYBBLES = {
- '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
- };
-
- public static final String hex(byte[] ba) {
- StringBuffer buf = new StringBuffer();
- for (int i = 0; i < ba.length; ++i) {
- int b = (ba[i]) & 0xff;
- buf.append(NYBBLES[b >> 4]);
- buf.append(NYBBLES[b&0x0f]);
- }
- return buf.toString();
- }
-
- private Bytes() {};
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/ConfigEntry.java b/orbotservice/src/test/java/org/torproject/android/control/ConfigEntry.java
deleted file mode 100644
index 31eb4b8e..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/ConfigEntry.java
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-/** A single key-value pair from Tor's configuration. */
-public class ConfigEntry {
- public ConfigEntry(String k, String v) {
- key = k;
- value = v;
- is_default = false;
- }
- public ConfigEntry(String k) {
- key = k;
- value = "";
- is_default = true;
- }
- public final String key;
- public final String value;
- public final boolean is_default;
-}
diff --git a/orbotservice/src/test/java/org/torproject/android/control/EventHandler.java b/orbotservice/src/test/java/org/torproject/android/control/EventHandler.java
deleted file mode 100644
index 5a4e2b5b..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/EventHandler.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-/**
- * Abstract interface whose methods are invoked when Tor sends us an event.
- *
- * @see TorControlConnection#setEventHandler
- * @see TorControlConnection#setEvents
- */
-public interface EventHandler {
- /**
- * Invoked when a circuit's status has changed.
- * Possible values for <b>status</b> are:
- * <ul>
- * <li>"LAUNCHED" : circuit ID assigned to new circuit</li>
- * <li>"BUILT" : all hops finished, can now accept streams</li>
- * <li>"EXTENDED" : one more hop has been completed</li>
- * <li>"FAILED" : circuit closed (was not built)</li>
- * <li>"CLOSED" : circuit closed (was built)</li>
- * </ul>
- *
- * <b>circID</b> is the alphanumeric identifier of the affected circuit,
- * and <b>path</b> is a comma-separated list of alphanumeric ServerIDs.
- */
- public void circuitStatus(String status, String circID, String path);
- /**
- * Invoked when a stream's status has changed.
- * Possible values for <b>status</b> are:
- * <ul>
- * <li>"NEW" : New request to connect</li>
- * <li>"NEWRESOLVE" : New request to resolve an address</li>
- * <li>"SENTCONNECT" : Sent a connect cell along a circuit</li>
- * <li>"SENTRESOLVE" : Sent a resolve cell along a circuit</li>
- * <li>"SUCCEEDED" : Received a reply; stream established</li>
- * <li>"FAILED" : Stream failed and not retriable.</li>
- * <li>"CLOSED" : Stream closed</li>
- * <li>"DETACHED" : Detached from circuit; still retriable.</li>
- * </ul>
- *
- * <b>streamID</b> is the alphanumeric identifier of the affected stream,
- * and its <b>target</b> is specified as address:port.
- */
- public void streamStatus(String status, String streamID, String target);
- /**
- * Invoked when the status of a connection to an OR has changed.
- * Possible values for <b>status</b> are ["LAUNCHED" | "CONNECTED" | "FAILED" | "CLOSED"].
- * <b>orName</b> is the alphanumeric identifier of the OR affected.
- */
- public void orConnStatus(String status, String orName);
- /**
- * Invoked once per second. <b>read</b> and <b>written</b> are
- * the number of bytes read and written, respectively, in
- * the last second.
- */
- public void bandwidthUsed(long read, long written);
- /**
- * Invoked whenever Tor learns about new ORs. The <b>orList</b> object
- * contains the alphanumeric ServerIDs associated with the new ORs.
- */
- public void newDescriptors(java.util.List<String> orList);
- /**
- * Invoked when Tor logs a message.
- * <b>severity</b> is one of ["DEBUG" | "INFO" | "NOTICE" | "WARN" | "ERR"],
- * and <b>msg</b> is the message string.
- */
- public void message(String severity, String msg);
- /**
- * Invoked when an unspecified message is received.
- * <type> is the message type, and <msg> is the message string.
- */
- public void unrecognized(String type, String msg);
-
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/PasswordDigest.java b/orbotservice/src/test/java/org/torproject/android/control/PasswordDigest.java
deleted file mode 100644
index 03d0a98e..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/PasswordDigest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-
-/**
- * A hashed digest of a secret password (used to set control connection
- * security.)
- *
- * For the actual hashing algorithm, see RFC2440's secret-to-key conversion.
- */
-public class PasswordDigest {
-
- private final byte[] secret;
- private final String hashedKey;
-
- /** Return a new password digest with a random secret and salt. */
- public static PasswordDigest generateDigest() {
- byte[] secret = new byte[20];
- SecureRandom rng = new SecureRandom();
- rng.nextBytes(secret);
- return new PasswordDigest(secret);
- }
-
- /** Construct a new password digest with a given secret and random salt */
- public PasswordDigest(byte[] secret) {
- this(secret, null);
- }
-
- /** Construct a new password digest with a given secret and random salt.
- * Note that the 9th byte of the specifier determines the number of hash
- * iterations as in RFC2440.
- */
- public PasswordDigest(byte[] secret, byte[] specifier) {
- this.secret = secret.clone();
- if (specifier == null) {
- specifier = new byte[9];
- SecureRandom rng = new SecureRandom();
- rng.nextBytes(specifier);
- specifier[8] = 96;
- }
- hashedKey = "16:"+encodeBytes(secretToKey(secret, specifier));
- }
-
- /** Return the secret used to generate this password hash.
- */
- public byte[] getSecret() {
- return secret.clone();
- }
-
- /** Return the hashed password in the format used by Tor. */
- public String getHashedPassword() {
- return hashedKey;
- }
-
- /** Parameter used by RFC2440's s2k algorithm. */
- private static final int EXPBIAS = 6;
-
- /** Implement rfc2440 s2k */
- public static byte[] secretToKey(byte[] secret, byte[] specifier) {
- MessageDigest d;
- try {
- d = MessageDigest.getInstance("SHA-1");
- } catch (NoSuchAlgorithmException ex) {
- throw new RuntimeException("Can't run without sha-1.");
- }
- int c = (specifier[8])&0xff;
- int count = (16 + (c&15)) << ((c>>4) + EXPBIAS);
-
- byte[] tmp = new byte[8+secret.length];
- System.arraycopy(specifier, 0, tmp, 0, 8);
- System.arraycopy(secret, 0, tmp, 8, secret.length);
- while (count > 0) {
- if (count >= tmp.length) {
- d.update(tmp);
- count -= tmp.length;
- } else {
- d.update(tmp, 0, count);
- count = 0;
- }
- }
- byte[] key = new byte[20+9];
- System.arraycopy(d.digest(), 0, key, 9, 20);
- System.arraycopy(specifier, 0, key, 0, 9);
- return key;
- }
-
- /** Return a hexadecimal encoding of a byte array. */
- // XXX There must be a better way to do this in Java.
- private static final String encodeBytes(byte[] ba) {
- return Bytes.hex(ba);
- }
-
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/README b/orbotservice/src/test/java/org/torproject/android/control/README
deleted file mode 100644
index b310c7d5..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/README
+++ /dev/null
@@ -1,4 +0,0 @@
-We broke the version detection stuff in Tor 0.1.2.16 / 0.2.0.4-alpha.
-Somebody should rip out the v0 control protocol stuff from here, and
-it should start working again. -RD
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/TorControlCommands.java b/orbotservice/src/test/java/org/torproject/android/control/TorControlCommands.java
deleted file mode 100644
index c98a1c48..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/TorControlCommands.java
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-/** Interface defining constants used by the Tor controller protocol.
- */
-// XXXX Take documentation for these from control-spec.txt
-public interface TorControlCommands {
-
- public static final short CMD_ERROR = 0x0000;
- public static final short CMD_DONE = 0x0001;
- public static final short CMD_SETCONF = 0x0002;
- public static final short CMD_GETCONF = 0x0003;
- public static final short CMD_CONFVALUE = 0x0004;
- public static final short CMD_SETEVENTS = 0x0005;
- public static final short CMD_EVENT = 0x0006;
- public static final short CMD_AUTH = 0x0007;
- public static final short CMD_SAVECONF = 0x0008;
- public static final short CMD_SIGNAL = 0x0009;
- public static final short CMD_MAPADDRESS = 0x000A;
- public static final short CMD_GETINFO = 0x000B;
- public static final short CMD_INFOVALUE = 0x000C;
- public static final short CMD_EXTENDCIRCUIT = 0x000D;
- public static final short CMD_ATTACHSTREAM = 0x000E;
- public static final short CMD_POSTDESCRIPTOR = 0x000F;
- public static final short CMD_FRAGMENTHEADER = 0x0010;
- public static final short CMD_FRAGMENT = 0x0011;
- public static final short CMD_REDIRECTSTREAM = 0x0012;
- public static final short CMD_CLOSESTREAM = 0x0013;
- public static final short CMD_CLOSECIRCUIT = 0x0014;
-
- public static final String[] CMD_NAMES = {
- "ERROR",
- "DONE",
- "SETCONF",
- "GETCONF",
- "CONFVALUE",
- "SETEVENTS",
- "EVENT",
- "AUTH",
- "SAVECONF",
- "SIGNAL",
- "MAPADDRESS",
- "GETINFO",
- "INFOVALUE",
- "EXTENDCIRCUIT",
- "ATTACHSTREAM",
- "POSTDESCRIPTOR",
- "FRAGMENTHEADER",
- "FRAGMENT",
- "REDIRECTSTREAM",
- "CLOSESTREAM",
- "CLOSECIRCUIT",
- };
-
- public static final short EVENT_CIRCSTATUS = 0x0001;
- public static final short EVENT_STREAMSTATUS = 0x0002;
- public static final short EVENT_ORCONNSTATUS = 0x0003;
- public static final short EVENT_BANDWIDTH = 0x0004;
- public static final short EVENT_NEWDESCRIPTOR = 0x0006;
- public static final short EVENT_MSG_DEBUG = 0x0007;
- public static final short EVENT_MSG_INFO = 0x0008;
- public static final short EVENT_MSG_NOTICE = 0x0009;
- public static final short EVENT_MSG_WARN = 0x000A;
- public static final short EVENT_MSG_ERROR = 0x000B;
-
- public static final String[] EVENT_NAMES = {
- "(0)",
- "CIRC",
- "STREAM",
- "ORCONN",
- "BW",
- "OLDLOG",
- "NEWDESC",
- "DEBUG",
- "INFO",
- "NOTICE",
- "WARN",
- "ERR",
- };
-
- public static final byte CIRC_STATUS_LAUNCHED = 0x01;
- public static final byte CIRC_STATUS_BUILT = 0x02;
- public static final byte CIRC_STATUS_EXTENDED = 0x03;
- public static final byte CIRC_STATUS_FAILED = 0x04;
- public static final byte CIRC_STATUS_CLOSED = 0x05;
-
- public static final String[] CIRC_STATUS_NAMES = {
- "LAUNCHED",
- "BUILT",
- "EXTENDED",
- "FAILED",
- "CLOSED",
- };
-
- public static final byte STREAM_STATUS_SENT_CONNECT = 0x00;
- public static final byte STREAM_STATUS_SENT_RESOLVE = 0x01;
- public static final byte STREAM_STATUS_SUCCEEDED = 0x02;
- public static final byte STREAM_STATUS_FAILED = 0x03;
- public static final byte STREAM_STATUS_CLOSED = 0x04;
- public static final byte STREAM_STATUS_NEW_CONNECT = 0x05;
- public static final byte STREAM_STATUS_NEW_RESOLVE = 0x06;
- public static final byte STREAM_STATUS_DETACHED = 0x07;
-
- public static final String[] STREAM_STATUS_NAMES = {
- "SENT_CONNECT",
- "SENT_RESOLVE",
- "SUCCEEDED",
- "FAILED",
- "CLOSED",
- "NEW_CONNECT",
- "NEW_RESOLVE",
- "DETACHED"
- };
-
- public static final byte OR_CONN_STATUS_LAUNCHED = 0x00;
- public static final byte OR_CONN_STATUS_CONNECTED = 0x01;
- public static final byte OR_CONN_STATUS_FAILED = 0x02;
- public static final byte OR_CONN_STATUS_CLOSED = 0x03;
-
- public static final String[] OR_CONN_STATUS_NAMES = {
- "LAUNCHED","CONNECTED","FAILED","CLOSED"
- };
-
- public static final byte SIGNAL_HUP = 0x01;
- public static final byte SIGNAL_INT = 0x02;
- public static final byte SIGNAL_USR1 = 0x0A;
- public static final byte SIGNAL_USR2 = 0x0C;
- public static final byte SIGNAL_TERM = 0x0F;
-
- public static final String ERROR_MSGS[] = {
- "Unspecified error",
- "Internal error",
- "Unrecognized message type",
- "Syntax error",
- "Unrecognized configuration key",
- "Invalid configuration value",
- "Unrecognized byte code",
- "Unauthorized",
- "Failed authentication attempt",
- "Resource exhausted",
- "No such stream",
- "No such circuit",
- "No such OR",
- };
-
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/TorControlConnection.java b/orbotservice/src/test/java/org/torproject/android/control/TorControlConnection.java
deleted file mode 100644
index 204dbc06..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/TorControlConnection.java
+++ /dev/null
@@ -1,730 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-/** A connection to a running Tor process as specified in control-spec.txt. */
-public class TorControlConnection implements TorControlCommands {
-
- private final LinkedList<Waiter> waiters;
- private final BufferedReader input;
- private final Writer output;
-
- private ControlParseThread thread; // Locking: this
-
- private volatile EventHandler handler;
- private volatile PrintWriter debugOutput;
- private volatile IOException parseThreadException;
-
- static class Waiter {
-
- List<ReplyLine> response; // Locking: this
-
- synchronized List<ReplyLine> getResponse() throws InterruptedException {
- while (response == null) {
- wait();
- }
- return response;
- }
-
- synchronized void setResponse(List<ReplyLine> response) {
- this.response = response;
- notifyAll();
- }
- }
-
- static class ReplyLine {
-
- final String status;
- final String msg;
- final String rest;
-
- ReplyLine(String status, String msg, String rest) {
- this.status = status; this.msg = msg; this.rest = rest;
- }
- }
-
- /** Create a new TorControlConnection to communicate with Tor over
- * a given socket. After calling this constructor, it is typical to
- * call launchThread and authenticate. */
- public TorControlConnection(Socket connection) throws IOException {
- this(connection.getInputStream(), connection.getOutputStream());
- }
-
- /** Create a new TorControlConnection to communicate with Tor over
- * an arbitrary pair of data streams.
- */
- public TorControlConnection(InputStream i, OutputStream o) {
- this(new InputStreamReader(i), new OutputStreamWriter(o));
- }
-
- public TorControlConnection(Reader i, Writer o) {
- this.output = o;
- if (i instanceof BufferedReader)
- this.input = (BufferedReader) i;
- else
- this.input = new BufferedReader(i);
- this.waiters = new LinkedList<Waiter>();
- }
-
- protected final void writeEscaped(String s) throws IOException {
- StringTokenizer st = new StringTokenizer(s, "\n");
- while (st.hasMoreTokens()) {
- String line = st.nextToken();
- if (line.startsWith("."))
- line = "."+line;
- if (line.endsWith("\r"))
- line += "\n";
- else
- line += "\r\n";
- if (debugOutput != null)
- debugOutput.print(">> "+line);
- output.write(line);
- }
- output.write(".\r\n");
- if (debugOutput != null)
- debugOutput.print(">> .\n");
- }
-
- protected static final String quote(String s) {
- StringBuffer sb = new StringBuffer("\"");
- for (int i = 0; i < s.length(); ++i) {
- char c = s.charAt(i);
- switch (c)
- {
- case '\r':
- case '\n':
- case '\\':
- case '\"':
- sb.append('\\');
- }
- sb.append(c);
- }
- sb.append('\"');
- return sb.toString();
- }
-
- protected final ArrayList<ReplyLine> readReply() throws IOException {
- ArrayList<ReplyLine> reply = new ArrayList<ReplyLine>();
- char c;
- do {
- String line = input.readLine();
- if (line == null) {
- // if line is null, the end of the stream has been reached, i.e.
- // the connection to Tor has been closed!
- if (reply.isEmpty()) {
- // nothing received so far, can exit cleanly
- return reply;
- }
- // received half of a reply before the connection broke down
- throw new TorControlSyntaxError("Connection to Tor " +
- " broke down while receiving reply!");
- }
- if (debugOutput != null)
- debugOutput.println("<< "+line);
- if (line.length() < 4)
- throw new TorControlSyntaxError("Line (\""+line+"\") too short");
- String status = line.substring(0,3);
- c = line.charAt(3);
- String msg = line.substring(4);
- String rest = null;
- if (c == '+') {
- StringBuffer data = new StringBuffer();
- while (true) {
- line = input.readLine();
- if (debugOutput != null)
- debugOutput.print("<< "+line);
- if (line.equals("."))
- break;
- else if (line.startsWith("."))
- line = line.substring(1);
- data.append(line).append('\n');
- }
- rest = data.toString();
- }
- reply.add(new ReplyLine(status, msg, rest));
- } while (c != ' ');
-
- return reply;
- }
-
- protected synchronized List<ReplyLine> sendAndWaitForResponse(String s,
- String rest) throws IOException {
- if(parseThreadException != null) throw parseThreadException;
- checkThread();
- Waiter w = new Waiter();
- if (debugOutput != null)
- debugOutput.print(">> "+s);
- synchronized (waiters) {
- output.write(s);
- if (rest != null)
- writeEscaped(rest);
- output.flush();
- waiters.addLast(w);
- }
- List<ReplyLine> lst;
- try {
- lst = w.getResponse();
- } catch (InterruptedException ex) {
- throw new IOException("Interrupted");
- }
- for (Iterator<ReplyLine> i = lst.iterator(); i.hasNext(); ) {
- ReplyLine c = i.next();
- if (! c.status.startsWith("2"))
- throw new TorControlError("Error reply: "+c.msg);
- }
- return lst;
- }
-
- /** Helper: decode a CMD_EVENT command and dispatch it to our
- * EventHandler (if any). */
- protected void handleEvent(ArrayList<ReplyLine> events) {
- if (handler == null)
- return;
-
- for (Iterator<ReplyLine> i = events.iterator(); i.hasNext(); ) {
- ReplyLine line = i.next();
- int idx = line.msg.indexOf(' ');
- String tp = line.msg.substring(0, idx).toUpperCase();
- String rest = line.msg.substring(idx+1);
- if (tp.equals("CIRC")) {
- List<String> lst = Bytes.splitStr(null, rest);
- handler.circuitStatus(lst.get(1),
- lst.get(0),
- lst.get(1).equals("LAUNCHED")
- || lst.size() < 3 ? ""
- : lst.get(2));
- } else if (tp.equals("STREAM")) {
- List<String> lst = Bytes.splitStr(null, rest);
- handler.streamStatus(lst.get(1),
- lst.get(0),
- lst.get(3));
- // XXXX circID.
- } else if (tp.equals("ORCONN")) {
- List<String> lst = Bytes.splitStr(null, rest);
- handler.orConnStatus(lst.get(1), lst.get(0));
- } else if (tp.equals("BW")) {
- List<String> lst = Bytes.splitStr(null, rest);
- handler.bandwidthUsed(Integer.parseInt(lst.get(0)),
- Integer.parseInt(lst.get(1)));
- } else if (tp.equals("NEWDESC")) {
- List<String> lst = Bytes.splitStr(null, rest);
- handler.newDescriptors(lst);
- } else if (tp.equals("DEBUG") ||
- tp.equals("INFO") ||
- tp.equals("NOTICE") ||
- tp.equals("WARN") ||
- tp.equals("ERR")) {
- handler.message(tp, rest);
- } else {
- handler.unrecognized(tp, rest);
- }
- }
- }
-
-
- /** Sets <b>w</b> as the PrintWriter for debugging output,
- * which writes out all messages passed between Tor and the controller.
- * Outgoing messages are preceded by "\>\>" and incoming messages are preceded
- * by "\<\<"
- */
- public void setDebugging(PrintWriter w) {
- debugOutput = w;
- }
-
- /** Sets <b>s</b> as the PrintStream for debugging output,
- * which writes out all messages passed between Tor and the controller.
- * Outgoing messages are preceded by "\>\>" and incoming messages are preceded
- * by "\<\<"
- */
- public void setDebugging(PrintStream s) {
- debugOutput = new PrintWriter(s, true);
- }
-
- /** Set the EventHandler object that will be notified of any
- * events Tor delivers to this connection. To make Tor send us
- * events, call setEvents(). */
- public void setEventHandler(EventHandler handler) {
- this.handler = handler;
- }
-
- /**
- * Start a thread to react to Tor's responses in the background.
- * This is necessary to handle asynchronous events and synchronous
- * responses that arrive independantly over the same socket.
- */
- public synchronized Thread launchThread(boolean daemon) {
- ControlParseThread th = new ControlParseThread();
- if (daemon)
- th.setDaemon(true);
- th.start();
- this.thread = th;
- return th;
- }
-
- protected class ControlParseThread extends Thread {
-
- @Override
- public void run() {
- try {
- react();
- } catch (IOException ex) {
- parseThreadException = ex;
- }
- }
- }
-
- protected synchronized void checkThread() {
- if (thread == null)
- launchThread(true);
- }
-
- /** helper: implement the main background loop. */
- protected void react() throws IOException {
- while (true) {
- ArrayList<ReplyLine> lst = readReply();
- if (lst.isEmpty()) {
- // connection has been closed remotely! end the loop!
- return;
- }
- if ((lst.get(0)).status.startsWith("6"))
- handleEvent(lst);
- else {
- synchronized (waiters) {
- if (!waiters.isEmpty())
- {
- Waiter w;
- w = waiters.removeFirst();
- w.setResponse(lst);
- }
- }
-
- }
- }
- }
-
- /** Change the value of the configuration option 'key' to 'val'.
- */
- public void setConf(String key, String value) throws IOException {
- List<String> lst = new ArrayList<String>();
- lst.add(key+" "+value);
- setConf(lst);
- }
-
- /** Change the values of the configuration options stored in kvMap. */
- public void setConf(Map<String, String> kvMap) throws IOException {
- List<String> lst = new ArrayList<String>();
- for (Iterator<Map.Entry<String,String>> it = kvMap.entrySet().iterator(); it.hasNext(); ) {
- Map.Entry<String,String> ent = it.next();
- lst.add(ent.getKey()+" "+ent.getValue()+"\n");
- }
- setConf(lst);
- }
-
- /** Changes the values of the configuration options stored in
- * <b>kvList</b>. Each list element in <b>kvList</b> is expected to be
- * String of the format "key value".
- *
- * Tor behaves as though it had just read each of the key-value pairs
- * from its configuration file. Keywords with no corresponding values have
- * their configuration values reset to their defaults. setConf is
- * all-or-nothing: if there is an error in any of the configuration settings,
- * Tor sets none of them.
- *
- * When a configuration option takes multiple values, or when multiple
- * configuration keys form a context-sensitive group (see getConf below), then
- * setting any of the options in a setConf command is taken to reset all of
- * the others. For example, if two ORBindAddress values are configured, and a
- * command arrives containing a single ORBindAddress value, the new
- * command's value replaces the two old values.
- *
- * To remove all settings for a given option entirely (and go back to its
- * default value), include a String in <b>kvList</b> containing the key and no value.
- */
- public void setConf(Collection<String> kvList) throws IOException {
- if (kvList.size() == 0)
- return;
- StringBuffer b = new StringBuffer("SETCONF");
- for (Iterator<String> it = kvList.iterator(); it.hasNext(); ) {
- String kv = it.next();
- int i = kv.indexOf(' ');
- if (i == -1)
- b.append(" ").append(kv);
- b.append(" ").append(kv.substring(0,i)).append("=")
- .append(quote(kv.substring(i+1)));
- }
- b.append("\r\n");
- sendAndWaitForResponse(b.toString(), null);
- }
-
- /** Try to reset the values listed in the collection 'keys' to their
- * default values.
- **/
- public void resetConf(Collection<String> keys) throws IOException {
- if (keys.size() == 0)
- return;
- StringBuffer b = new StringBuffer("RESETCONF");
- for (Iterator<String> it = keys.iterator(); it.hasNext(); ) {
- String key = it.next();
- b.append(" ").append(key);
- }
- b.append("\r\n");
- sendAndWaitForResponse(b.toString(), null);
- }
-
- /** Return the value of the configuration option 'key' */
- public List<ConfigEntry> getConf(String key) throws IOException {
- List<String> lst = new ArrayList<String>();
- lst.add(key);
- return getConf(lst);
- }
-
- /** Requests the values of the configuration variables listed in <b>keys</b>.
- * Results are returned as a list of ConfigEntry objects.
- *
- * If an option appears multiple times in the configuration, all of its
- * key-value pairs are returned in order.
- *
- * Some options are context-sensitive, and depend on other options with
- * different keywords. These cannot be fetched directly. Currently there
- * is only one such option: clients should use the "HiddenServiceOptions"
- * virtual keyword to get all HiddenServiceDir, HiddenServicePort,
- * HiddenServiceNodes, and HiddenServiceExcludeNodes option settings.
- */
- public List<ConfigEntry> getConf(Collection<String> keys) throws IOException {
- StringBuffer sb = new StringBuffer("GETCONF");
- for (Iterator<String> it = keys.iterator(); it.hasNext(); ) {
- String key = it.next();
- sb.append(" ").append(key);
- }
- sb.append("\r\n");
- List<ReplyLine> lst = sendAndWaitForResponse(sb.toString(), null);
- List<ConfigEntry> result = new ArrayList<ConfigEntry>();
- for (Iterator<ReplyLine> it = lst.iterator(); it.hasNext(); ) {
- String kv = (it.next()).msg;
- int idx = kv.indexOf('=');
- if (idx >= 0)
- result.add(new ConfigEntry(kv.substring(0, idx),
- kv.substring(idx+1)));
- else
- result.add(new ConfigEntry(kv));
- }
- return result;
- }
-
- /** Request that the server inform the client about interesting events.
- * Each element of <b>events</b> is one of the following Strings:
- * ["CIRC" | "STREAM" | "ORCONN" | "BW" | "DEBUG" |
- * "INFO" | "NOTICE" | "WARN" | "ERR" | "NEWDESC" | "ADDRMAP"] .
- *
- * Any events not listed in the <b>events</b> are turned off; thus, calling
- * setEvents with an empty <b>events</b> argument turns off all event reporting.
- */
- public void setEvents(List<String> events) throws IOException {
- StringBuffer sb = new StringBuffer("SETEVENTS");
- for (Iterator<String> it = events.iterator(); it.hasNext(); ) {
- sb.append(" ").append(it.next());
- }
- sb.append("\r\n");
- sendAndWaitForResponse(sb.toString(), null);
- }
-
- /** Authenticates the controller to the Tor server.
- *
- * By default, the current Tor implementation trusts all local users, and
- * the controller can authenticate itself by calling authenticate(new byte[0]).
- *
- * If the 'CookieAuthentication' option is true, Tor writes a "magic cookie"
- * file named "control_auth_cookie" into its data directory. To authenticate,
- * the controller must send the contents of this file in <b>auth</b>.
- *
- * If the 'HashedControlPassword' option is set, <b>auth</b> must contain the salted
- * hash of a secret password. The salted hash is computed according to the
- * S2K algorithm in RFC 2440 (OpenPGP), and prefixed with the s2k specifier.
- * This is then encoded in hexadecimal, prefixed by the indicator sequence
- * "16:".
- *
- * You can generate the salt of a password by calling
- * 'tor --hash-password <password>'
- * or by using the provided PasswordDigest class.
- * To authenticate under this scheme, the controller sends Tor the original
- * secret that was used to generate the password.
- */
- public void authenticate(byte[] auth) throws IOException {
- String cmd = "AUTHENTICATE " + Bytes.hex(auth) + "\r\n";
- sendAndWaitForResponse(cmd, null);
- }
-
- /** Instructs the server to write out its configuration options into its torrc.
- */
- public void saveConf() throws IOException {
- sendAndWaitForResponse("SAVECONF\r\n", null);
- }
-
- /** Sends a signal from the controller to the Tor server.
- * <b>signal</b> is one of the following Strings:
- * <ul>
- * <li>"RELOAD" or "HUP" : Reload config items, refetch directory</li>
- * <li>"SHUTDOWN" or "INT" : Controlled shutdown: if server is an OP, exit immediately.
- * If it's an OR, close listeners and exit after 30 seconds</li>
- * <li>"DUMP" or "USR1" : Dump stats: log information about open connections and circuits</li>
- * <li>"DEBUG" or "USR2" : Debug: switch all open logs to loglevel debug</li>
- * <li>"HALT" or "TERM" : Immediate shutdown: clean up and exit now</li>
- * </ul>
- */
- public void signal(String signal) throws IOException {
- String cmd = "SIGNAL " + signal + "\r\n";
- sendAndWaitForResponse(cmd, null);
- }
-
- /** Send a signal to the Tor process to shut it down or halt it.
- * Does not wait for a response. */
- public void shutdownTor(String signal) throws IOException {
- String s = "SIGNAL " + signal + "\r\n";
- Waiter w = new Waiter();
- if (debugOutput != null)
- debugOutput.print(">> "+s);
- synchronized (waiters) {
- output.write(s);
- output.flush();
- }
- }
-
- /** Tells the Tor server that future SOCKS requests for connections to a set of original
- * addresses should be replaced with connections to the specified replacement
- * addresses. Each element of <b>kvLines</b> is a String of the form
- * "old-address new-address". This function returns the new address mapping.
- *
- * The client may decline to provide a body for the original address, and
- * instead send a special null address ("0.0.0.0" for IPv4, "::0" for IPv6, or
- * "." for hostname), signifying that the server should choose the original
- * address itself, and return that address in the reply. The server
- * should ensure that it returns an element of address space that is unlikely
- * to be in actual use. If there is already an address mapped to the
- * destination address, the server may reuse that mapping.
- *
- * If the original address is already mapped to a different address, the old
- * mapping is removed. If the original address and the destination address
- * are the same, the server removes any mapping in place for the original
- * address.
- *
- * Mappings set by the controller last until the Tor process exits:
- * they never expire. If the controller wants the mapping to last only
- * a certain time, then it must explicitly un-map the address when that
- * time has elapsed.
- */
- public Map<String,String> mapAddresses(Collection<String> kvLines) throws IOException {
- StringBuffer sb = new StringBuffer("MAPADDRESS");
- for (Iterator<String> it = kvLines.iterator(); it.hasNext(); ) {
- String kv = it.next();
- int i = kv.indexOf(' ');
- sb.append(" ").append(kv.substring(0,i)).append("=")
- .append(quote(kv.substring(i+1)));
- }
- sb.append("\r\n");
- List<ReplyLine> lst = sendAndWaitForResponse(sb.toString(), null);
- Map<String,String> result = new HashMap<String,String>();
- for (Iterator<ReplyLine> it = lst.iterator(); it.hasNext(); ) {
- String kv = (it.next()).msg;
- int idx = kv.indexOf('=');
- result.put(kv.substring(0, idx),
- kv.substring(idx+1));
- }
- return result;
- }
-
- public Map<String,String> mapAddresses(Map<String,String> addresses) throws IOException {
- List<String> kvList = new ArrayList<String>();
- for (Iterator<Map.Entry<String, String>> it = addresses.entrySet().iterator(); it.hasNext(); ) {
- Map.Entry<String,String> e = it.next();
- kvList.add(e.getKey()+" "+e.getValue());
- }
- return mapAddresses(kvList);
- }
-
- public String mapAddress(String fromAddr, String toAddr) throws IOException {
- List<String> lst = new ArrayList<String>();
- lst.add(fromAddr+" "+toAddr+"\n");
- Map<String,String> m = mapAddresses(lst);
- return m.get(fromAddr);
- }
-
- /** Queries the Tor server for keyed values that are not stored in the torrc
- * configuration file. Returns a map of keys to values.
- *
- * Recognized keys include:
- * <ul>
- * <li>"version" : The version of the server's software, including the name
- * of the software. (example: "Tor 0.0.9.4")</li>
- * <li>"desc/id/<OR identity>" or "desc/name/<OR nickname>" : the latest server
- * descriptor for a given OR, NUL-terminated. If no such OR is known, the
- * corresponding value is an empty string.</li>
- * <li>"network-status" : a space-separated list of all known OR identities.
- * This is in the same format as the router-status line in directories;
- * see tor-spec.txt for details.</li>
- * <li>"addr-mappings/all"</li>
- * <li>"addr-mappings/config"</li>
- * <li>"addr-mappings/cache"</li>
- * <li>"addr-mappings/control" : a space-separated list of address mappings, each
- * in the form of "from-address=to-address". The 'config' key
- * returns those address mappings set in the configuration; the 'cache'
- * key returns the mappings in the client-side DNS cache; the 'control'
- * key returns the mappings set via the control interface; the 'all'
- * target returns the mappings set through any mechanism.</li>
- * <li>"circuit-status" : A series of lines as for a circuit status event. Each line is of the form:
- * "CircuitID CircStatus Path"</li>
- * <li>"stream-status" : A series of lines as for a stream status event. Each is of the form:
- * "StreamID StreamStatus CircID Target"</li>
- * <li>"orconn-status" : A series of lines as for an OR connection status event. Each is of the
- * form: "ServerID ORStatus"</li>
- * </ul>
- */
- public Map<String,String> getInfo(Collection<String> keys) throws IOException {
- StringBuffer sb = new StringBuffer("GETINFO");
- for (Iterator<String> it = keys.iterator(); it.hasNext(); ) {
- sb.append(" ").append(it.next());
- }
- sb.append("\r\n");
- List<ReplyLine> lst = sendAndWaitForResponse(sb.toString(), null);
- Map<String,String> m = new HashMap<String,String>();
- for (Iterator<ReplyLine> it = lst.iterator(); it.hasNext(); ) {
- ReplyLine line = it.next();
- int idx = line.msg.indexOf('=');
- if (idx<0)
- break;
- String k = line.msg.substring(0,idx);
- String v;
- if (line.rest != null) {
- v = line.rest;
- } else {
- v = line.msg.substring(idx+1);
- }
- m.put(k, v);
- }
- return m;
- }
-
-
-
- /** Return the value of the information field 'key' */
- public String getInfo(String key) throws IOException {
- List<String> lst = new ArrayList<String>();
- lst.add(key);
- Map<String,String> m = getInfo(lst);
- return m.get(key);
- }
-
- /** An extendCircuit request takes one of two forms: either the <b>circID</b> is zero, in
- * which case it is a request for the server to build a new circuit according
- * to the specified path, or the <b>circID</b> is nonzero, in which case it is a
- * request for the server to extend an existing circuit with that ID according
- * to the specified <b>path</b>.
- *
- * If successful, returns the Circuit ID of the (maybe newly created) circuit.
- */
- public String extendCircuit(String circID, String path) throws IOException {
- List<ReplyLine> lst = sendAndWaitForResponse(
- "EXTENDCIRCUIT "+circID+" "+path+"\r\n", null);
- return (lst.get(0)).msg;
- }
-
- /** Informs the Tor server that the stream specified by <b>streamID</b> should be
- * associated with the circuit specified by <b>circID</b>.
- *
- * Each stream may be associated with
- * at most one circuit, and multiple streams may share the same circuit.
- * Streams can only be attached to completed circuits (that is, circuits that
- * have sent a circuit status "BUILT" event or are listed as built in a
- * getInfo circuit-status request).
- *
- * If <b>circID</b> is 0, responsibility for attaching the given stream is
- * returned to Tor.
- *
- * By default, Tor automatically attaches streams to
- * circuits itself, unless the configuration variable
- * "__LeaveStreamsUnattached" is set to "1". Attempting to attach streams
- * via TC when "__LeaveStreamsUnattached" is false may cause a race between
- * Tor and the controller, as both attempt to attach streams to circuits.
- */
- public void attachStream(String streamID, String circID)
- throws IOException {
- sendAndWaitForResponse("ATTACHSTREAM "+streamID+" "+circID+"\r\n", null);
- }
-
- /** Tells Tor about the server descriptor in <b>desc</b>.
- *
- * The descriptor, when parsed, must contain a number of well-specified
- * fields, including fields for its nickname and identity.
- */
- // More documentation here on format of desc?
- // No need for return value? control-spec.txt says reply is merely "250 OK" on success...
- public String postDescriptor(String desc) throws IOException {
- List<ReplyLine> lst = sendAndWaitForResponse("+POSTDESCRIPTOR\r\n", desc);
- return (lst.get(0)).msg;
- }
-
- /** Tells Tor to change the exit address of the stream identified by <b>streamID</b>
- * to <b>address</b>. No remapping is performed on the new provided address.
- *
- * To be sure that the modified address will be used, this event must be sent
- * after a new stream event is received, and before attaching this stream to
- * a circuit.
- */
- public void redirectStream(String streamID, String address) throws IOException {
- sendAndWaitForResponse("REDIRECTSTREAM "+streamID+" "+address+"\r\n",
- null);
- }
-
- /** Tells Tor to close the stream identified by <b>streamID</b>.
- * <b>reason</b> should be one of the Tor RELAY_END reasons given in tor-spec.txt, as a decimal:
- * <ul>
- * <li>1 -- REASON_MISC (catch-all for unlisted reasons)</li>
- * <li>2 -- REASON_RESOLVEFAILED (couldn't look up hostname)</li>
- * <li>3 -- REASON_CONNECTREFUSED (remote host refused connection)</li>
- * <li>4 -- REASON_EXITPOLICY (OR refuses to connect to host or port)</li>
- * <li>5 -- REASON_DESTROY (Circuit is being destroyed)</li>
- * <li>6 -- REASON_DONE (Anonymized TCP connection was closed)</li>
- * <li>7 -- REASON_TIMEOUT (Connection timed out, or OR timed out while connecting)</li>
- * <li>8 -- (unallocated)</li>
- * <li>9 -- REASON_HIBERNATING (OR is temporarily hibernating)</li>
- * <li>10 -- REASON_INTERNAL (Internal error at the OR)</li>
- * <li>11 -- REASON_RESOURCELIMIT (OR has no resources to fulfill request)</li>
- * <li>12 -- REASON_CONNRESET (Connection was unexpectedly reset)</li>
- * <li>13 -- REASON_TORPROTOCOL (Sent when closing connection because of Tor protocol violations)</li>
- * </ul>
- *
- * Tor may hold the stream open for a while to flush any data that is pending.
- */
- public void closeStream(String streamID, byte reason)
- throws IOException {
- sendAndWaitForResponse("CLOSESTREAM "+streamID+" "+reason+"\r\n",null);
- }
-
- /** Tells Tor to close the circuit identified by <b>circID</b>.
- * If <b>ifUnused</b> is true, do not close the circuit unless it is unused.
- */
- public void closeCircuit(String circID, boolean ifUnused) throws IOException {
- sendAndWaitForResponse("CLOSECIRCUIT "+circID+
- (ifUnused?" IFUNUSED":"")+"\r\n", null);
- }
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/TorControlError.java b/orbotservice/src/test/java/org/torproject/android/control/TorControlError.java
deleted file mode 100644
index d07ee514..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/TorControlError.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-import java.io.IOException;
-
-/**
- * An exception raised when Tor tells us about an error.
- */
-public class TorControlError extends IOException {
-
- static final long serialVersionUID = 3;
-
- private final int errorType;
-
- public TorControlError(int type, String s) {
- super(s);
- errorType = type;
- }
-
- public TorControlError(String s) {
- this(-1, s);
- }
-
- public int getErrorType() {
- return errorType;
- }
-
- public String getErrorMsg() {
- try {
- if (errorType == -1)
- return null;
- return TorControlCommands.ERROR_MSGS[errorType];
- } catch (ArrayIndexOutOfBoundsException ex) {
- return "Unrecongized error #"+errorType;
- }
- }
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/TorControlSyntaxError.java b/orbotservice/src/test/java/org/torproject/android/control/TorControlSyntaxError.java
deleted file mode 100644
index dba4f44b..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/TorControlSyntaxError.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control;
-
-import java.io.IOException;
-
-/**
- * An exception raised when Tor behaves in an unexpected way.
- */
-public class TorControlSyntaxError extends IOException {
-
- static final long serialVersionUID = 3;
-
- public TorControlSyntaxError(String s) { super(s); }
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/examples/.cvsignore b/orbotservice/src/test/java/org/torproject/android/control/examples/.cvsignore
deleted file mode 100644
index 6b468b62..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/examples/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.class
diff --git a/orbotservice/src/test/java/org/torproject/android/control/examples/DebuggingEventHandler.java b/orbotservice/src/test/java/org/torproject/android/control/examples/DebuggingEventHandler.java
deleted file mode 100644
index 48c49a28..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/examples/DebuggingEventHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control.examples;
-
-import java.io.PrintWriter;
-import java.util.Iterator;
-import org.torproject.android.control.EventHandler;
-
-public class DebuggingEventHandler implements EventHandler {
-
- private final PrintWriter out;
-
- public DebuggingEventHandler(PrintWriter p) {
- out = p;
- }
-
- public void circuitStatus(String status, String circID, String path) {
- out.println("Circuit "+circID+" is now "+status+" (path="+path+")");
- }
- public void streamStatus(String status, String streamID, String target) {
- out.println("Stream "+streamID+" is now "+status+" (target="+target+")");
- }
- public void orConnStatus(String status, String orName) {
- out.println("OR connection to "+orName+" is now "+status);
- }
- public void bandwidthUsed(long read, long written) {
- out.println("Bandwidth usage: "+read+" bytes read; "+
- written+" bytes written.");
- }
- public void newDescriptors(java.util.List<String> orList) {
- out.println("New descriptors for routers:");
- for (Iterator<String> i = orList.iterator(); i.hasNext(); )
- out.println(" "+i.next());
- }
- public void message(String type, String msg) {
- out.println("["+type+"] "+msg.trim());
- }
-
- public void unrecognized(String type, String msg) {
- out.println("unrecognized event ["+type+"] "+msg.trim());
- }
-
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/control/examples/Main.java b/orbotservice/src/test/java/org/torproject/android/control/examples/Main.java
deleted file mode 100644
index b0e0a3c0..00000000
--- a/orbotservice/src/test/java/org/torproject/android/control/examples/Main.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control.examples;
-
-import org.torproject.android.control.*;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Iterator;
-
-public class Main implements TorControlCommands {
-
- public static void main(String args[]) {
- if (args.length < 1) {
- System.err.println("No command given.");
- return;
- }
- try {
- if (args[0].equals("set-config")) {
- setConfig(args);
- } else if (args[0].equals("get-config")) {
- getConfig(args);
- } else if (args[0].equals("get-info")) {
- getInfo(args);
- } else if (args[0].equals("listen")) {
- listenForEvents(args);
- } else if (args[0].equals("signal")) {
- signal(args);
- } else if (args[0].equals("auth")) {
- authDemo(args);
- } else {
- System.err.println("Unrecognized command: "+args[0]);
- }
- } catch (EOFException ex) {
- System.out.println("Control socket closed by Tor.");
- } catch (TorControlError ex) {
- System.err.println("Error from Tor process: "+
- ex+" ["+ex.getErrorMsg()+"]");
- } catch (IOException ex) {
- System.err.println("IO exception when talking to Tor process: "+
- ex);
- ex.printStackTrace(System.err);
- }
- }
-
- private static TorControlConnection getConnection(String[] args,
- boolean daemon) throws IOException {
- Socket s = new Socket("127.0.0.1", 9100);
- TorControlConnection conn = new TorControlConnection(s);
- conn.launchThread(daemon);
- conn.authenticate(new byte[0]);
- return conn;
- }
-
- private static TorControlConnection getConnection(String[] args)
- throws IOException {
- return getConnection(args, true);
- }
-
- public static void setConfig(String[] args) throws IOException {
- // Usage: "set-config [-save] key value key value key value"
- TorControlConnection conn = getConnection(args);
- ArrayList<String> lst = new ArrayList<String>();
- int i = 1;
- boolean save = false;
- if (args[i].equals("-save")) {
- save = true;
- ++i;
- }
- for (; i < args.length; i +=2) {
- lst.add(args[i]+" "+args[i+1]);
- }
- conn.setConf(lst);
- if (save) {
- conn.saveConf();
- }
- }
-
- public static void getConfig(String[] args) throws IOException {
- // Usage: get-config key key key
- TorControlConnection conn = getConnection(args);
- List<ConfigEntry> lst = conn.getConf(Arrays.asList(args).subList(1,args.length));
- for (Iterator<ConfigEntry> i = lst.iterator(); i.hasNext(); ) {
- ConfigEntry e = i.next();
- System.out.println("KEY: "+e.key);
- System.out.println("VAL: "+e.value);
- }
- }
-
- public static void getInfo(String[] args) throws IOException {
- TorControlConnection conn = getConnection(args);
- Map<String,String> m = conn.getInfo(Arrays.asList(args).subList(1,args.length));
- for (Iterator<Map.Entry<String, String>> i = m.entrySet().iterator(); i.hasNext(); ) {
- Map.Entry<String,String> e = i.next();
- System.out.println("KEY: "+e.getKey());
- System.out.println("VAL: "+e.getValue());
- }
- }
-
- public static void listenForEvents(String[] args) throws IOException {
- // Usage: listen [circ|stream|orconn|bw|newdesc|info|notice|warn|error]*
- TorControlConnection conn = getConnection(args, false);
- ArrayList<String> lst = new ArrayList<String>();
- for (int i = 1; i < args.length; ++i) {
- lst.add(args[i]);
- }
- conn.setEventHandler(
- new DebuggingEventHandler(new PrintWriter(System.out, true)));
- conn.setEvents(lst);
- }
-
- public static void signal(String[] args) throws IOException {
- // Usage signal [reload|shutdown|dump|debug|halt]
- TorControlConnection conn = getConnection(args, false);
- // distinguish shutdown signal from other signals
- if ("SHUTDOWN".equalsIgnoreCase(args[1])
- || "HALT".equalsIgnoreCase(args[1])) {
- conn.shutdownTor(args[1].toUpperCase());
- } else {
- conn.signal(args[1].toUpperCase());
- }
- }
-
- public static void authDemo(String[] args) throws IOException {
-
- PasswordDigest pwd = PasswordDigest.generateDigest();
- Socket s = new Socket("127.0.0.1", 9100);
- TorControlConnection conn = new TorControlConnection(s);
- conn.launchThread(true);
- conn.authenticate(new byte[0]);
-
- conn.setConf("HashedControlPassword", pwd.getHashedPassword());
-
- s = new Socket("127.0.0.1", 9100);
- conn = new TorControlConnection(s);
- conn.launchThread(true);
- conn.authenticate(pwd.getSecret());
- }
-
-}
-
diff --git a/orbotservice/src/test/java/org/torproject/android/service/ExampleUnitTest.java b/orbotservice/src/test/java/org/torproject/android/service/ExampleUnitTest.java
deleted file mode 100644
index 578fa4b9..00000000
--- a/orbotservice/src/test/java/org/torproject/android/service/ExampleUnitTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.torproject.android.service;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * To work on unit tests, switch the Test Artifact in the Build Variants view.
- */
-public class ExampleUnitTest {
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
\ No newline at end of file
1
0

22 Dec '21
commit 9b483cfd01177e575ac46487466b9ea0e39911d2
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Wed Dec 18 11:38:28 2019 +0100
get geoip files as JARs from jcenter Maven repo
---
app-mini/src/main/assets/common/geoip | 0
app-mini/src/main/assets/common/geoip6 | 0
orbotservice/build.gradle | 2 ++
.../android/service/util/CustomTorResourceInstaller.java | 13 ++++---------
4 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/app-mini/src/main/assets/common/geoip b/app-mini/src/main/assets/common/geoip
deleted file mode 100644
index e69de29b..00000000
diff --git a/app-mini/src/main/assets/common/geoip6 b/app-mini/src/main/assets/common/geoip6
deleted file mode 100644
index e69de29b..00000000
diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index 0d6b162e..65b6d6b2 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -64,6 +64,8 @@ dependencies {
implementation 'com.offbynull.portmapper:portmapper:2.0.5'
+ implementation 'info.guardianproject:geoip:20191217'
+
api 'info.guardianproject:jtorctl:0.4'
implementation 'com.github.tladesignz:IPtProxy:0.5.2'
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
index b39b6ae7..fc8acde1 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
@@ -4,6 +4,8 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.util.Log;
+import org.torproject.android.service.TorServiceConstants;
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -16,12 +18,6 @@ public class CustomTorResourceInstaller {
private static final String TAG = "CustomTorResourceInstaller";
- String COMMON_ASSET_KEY = "common/";
-
- //geoip data file asset key
- String GEOIP_ASSET_KEY = "geoip";
- String GEOIP6_ASSET_KEY = "geoip6";
-
private File installFolder;
private Context context;
@@ -98,15 +94,14 @@ public class CustomTorResourceInstaller {
return fList;
}
- //
/*
* Extract the Tor resources from the APK file using ZIP
*/
public void installGeoIP() throws IOException {
if (!installFolder.exists())
installFolder.mkdirs();
- assetToFile(COMMON_ASSET_KEY + GEOIP_ASSET_KEY, GEOIP_ASSET_KEY, false, false);
- assetToFile(COMMON_ASSET_KEY + GEOIP6_ASSET_KEY, GEOIP6_ASSET_KEY, false, false);
+ assetToFile(TorServiceConstants.GEOIP_ASSET_KEY, TorServiceConstants.GEOIP_ASSET_KEY, false, false);
+ assetToFile(TorServiceConstants.GEOIP6_ASSET_KEY, TorServiceConstants.GEOIP6_ASSET_KEY, false, false);
}
/*
1
0

[orbot/master] fix lint StringFormatMatches: bad format type, was String should be int
by n8fr8@torproject.org 22 Dec '21
by n8fr8@torproject.org 22 Dec '21
22 Dec '21
commit c41f8e8879beaed58cd9585a9ee5c5a1947e6b7d
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Wed Dec 18 16:12:58 2019 +0100
fix lint StringFormatMatches: bad format type, was String should be int
sed -i 's,\(hidden_service_request.*%1\$\)s,\1d,' */src/main/res/values-*/*strings.xml
---
app-mini/src/main/res/values-ay/strings.xml | 2 +-
app-mini/src/main/res/values-be/strings.xml | 2 +-
app-mini/src/main/res/values-ca/strings.xml | 2 +-
app-mini/src/main/res/values-de/strings.xml | 2 +-
app-mini/src/main/res/values-el/strings.xml | 2 +-
app-mini/src/main/res/values-es-rAR/strings.xml | 2 +-
app-mini/src/main/res/values-es/strings.xml | 2 +-
app-mini/src/main/res/values-eu/strings.xml | 2 +-
app-mini/src/main/res/values-fa/strings.xml | 2 +-
app-mini/src/main/res/values-fr/strings.xml | 2 +-
app-mini/src/main/res/values-gl/strings.xml | 2 +-
app-mini/src/main/res/values-hi/strings.xml | 2 +-
app-mini/src/main/res/values-hu/strings.xml | 2 +-
app-mini/src/main/res/values-is/strings.xml | 2 +-
app-mini/src/main/res/values-it/strings.xml | 2 +-
app-mini/src/main/res/values-ja/strings.xml | 2 +-
app-mini/src/main/res/values-mk/strings.xml | 2 +-
app-mini/src/main/res/values-nl/strings.xml | 2 +-
app-mini/src/main/res/values-pt-rBR/strings.xml | 2 +-
app-mini/src/main/res/values-ru/strings.xml | 2 +-
app-mini/src/main/res/values-sr/strings.xml | 2 +-
app-mini/src/main/res/values-sv/strings.xml | 2 +-
app-mini/src/main/res/values-th/strings.xml | 2 +-
app-mini/src/main/res/values-tr/strings.xml | 2 +-
app-mini/src/main/res/values-uk/strings.xml | 2 +-
app-mini/src/main/res/values-zh-rTW/strings.xml | 2 +-
app-mini/src/main/res/values/strings.xml | 2 +-
app/src/main/java/org/torproject/android/OrbotMainActivity.java | 4 ++--
app/src/main/res/values-ay/strings.xml | 2 +-
app/src/main/res/values-be/strings.xml | 2 +-
app/src/main/res/values-ca/strings.xml | 2 +-
app/src/main/res/values-de/strings.xml | 2 +-
app/src/main/res/values-el/strings.xml | 2 +-
app/src/main/res/values-es-rAR/strings.xml | 2 +-
app/src/main/res/values-es/strings.xml | 2 +-
app/src/main/res/values-eu/strings.xml | 2 +-
app/src/main/res/values-fa/strings.xml | 2 +-
app/src/main/res/values-fi/strings.xml | 2 +-
app/src/main/res/values-fr-rFR/strings.xml | 2 +-
app/src/main/res/values-fr/strings.xml | 2 +-
app/src/main/res/values-gl/strings.xml | 2 +-
app/src/main/res/values-hi/strings.xml | 2 +-
app/src/main/res/values-hu/strings.xml | 2 +-
app/src/main/res/values-is/strings.xml | 2 +-
app/src/main/res/values-it/strings.xml | 2 +-
app/src/main/res/values-ja/strings.xml | 2 +-
app/src/main/res/values-mk/strings.xml | 2 +-
app/src/main/res/values-nb/strings.xml | 2 +-
app/src/main/res/values-nl/strings.xml | 2 +-
app/src/main/res/values-pl/strings.xml | 2 +-
app/src/main/res/values-pt-rBR/strings.xml | 2 +-
app/src/main/res/values-pt-rPT/strings.xml | 2 +-
app/src/main/res/values-pt/strings.xml | 2 +-
app/src/main/res/values-ru/strings.xml | 2 +-
app/src/main/res/values-sr/strings.xml | 2 +-
app/src/main/res/values-sv/strings.xml | 2 +-
app/src/main/res/values-th/strings.xml | 2 +-
app/src/main/res/values-tr/strings.xml | 2 +-
app/src/main/res/values-uk/strings.xml | 2 +-
app/src/main/res/values-zh-rCN/strings.xml | 2 +-
app/src/main/res/values-zh-rTW/strings.xml | 2 +-
61 files changed, 62 insertions(+), 62 deletions(-)
diff --git a/app-mini/src/main/res/values-ay/strings.xml b/app-mini/src/main/res/values-ay/strings.xml
index 3c716a32..25a4ac0e 100644
--- a/app-mini/src/main/res/values-ay/strings.xml
+++ b/app-mini/src/main/res/values-ay/strings.xml
@@ -93,7 +93,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Imantat apayañ thakhinak Tor llikar mä wakichäwiw jist\'arañ muni %1$s. Wakichawitix uñt\'atachixa, iyaw sama.</string>
+ <string name="hidden_service_request">Imantat apayañ thakhinak Tor llikar mä wakichäwiw jist\'arañ muni %1$d. Wakichawitix uñt\'atachixa, iyaw sama.</string>
<string name="found_existing_tor_process">Utjir Toraw jikxatata...</string>
<string name="something_bad_happened">Mä jan walt\'äwiw utji. Qillqantayasit uñakipam</string>
<string name="unable_to_read_hidden_service_name">Janiw imantat yanapirin sutiman ullarañjamakänti</string>
diff --git a/app-mini/src/main/res/values-be/strings.xml b/app-mini/src/main/res/values-be/strings.xml
index 7f3816ce..aaa78150 100644
--- a/app-mini/src/main/res/values-be/strings.xml
+++ b/app-mini/src/main/res/values-be/strings.xml
@@ -93,7 +93,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Дадатак хоча адкрыць схаваны порт сервера %1$s сеткі Tor. Гэта бяспечна, калі вы давяраеце дадзенаму дадатку.</string>
+ <string name="hidden_service_request">Дадатак хоча адкрыць схаваны порт сервера %1$d сеткі Tor. Гэта бяспечна, калі вы давяраеце дадзенаму дадатку.</string>
<string name="found_existing_tor_process">знойдзены існавалы працэс Tor...</string>
<string name="something_bad_happened">Адбылася нейкая памылка. Праверце журнал.</string>
<string name="unable_to_read_hidden_service_name">немагчыма прачытаць імя схаванай службы</string>
diff --git a/app-mini/src/main/res/values-ca/strings.xml b/app-mini/src/main/res/values-ca/strings.xml
index e1b695fd..5c4741b0 100644
--- a/app-mini/src/main/res/values-ca/strings.xml
+++ b/app-mini/src/main/res/values-ca/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Una aplicació vol obrir el port de servidor ocults%1$s a la xarxa Tor. Això és segur si confieu en l\'aplicació</string>
+ <string name="hidden_service_request">Una aplicació vol obrir el port de servidor ocults%1$d a la xarxa Tor. Això és segur si confieu en l\'aplicació</string>
<string name="found_existing_tor_process">s\'ha trobat un procés Tor existent...</string>
<string name="something_bad_happened">Ha fallat alguna cosa. Comproveu el registre</string>
<string name="unable_to_read_hidden_service_name">ha estat impossible llegir el nom del servei ocult</string>
diff --git a/app-mini/src/main/res/values-de/strings.xml b/app-mini/src/main/res/values-de/strings.xml
index ef54116a..0e512fd2 100644
--- a/app-mini/src/main/res/values-de/strings.xml
+++ b/app-mini/src/main/res/values-de/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Eine Anwendung möchte den Versteckten Server-Anschluss %1$s zum Tor-Netz öffnen. Dies ist sicher, wenn Sie der Anwendung vertrauen.</string>
+ <string name="hidden_service_request">Eine Anwendung möchte den Versteckten Server-Anschluss %1$d zum Tor-Netz öffnen. Dies ist sicher, wenn Sie der Anwendung vertrauen.</string>
<string name="found_existing_tor_process">bestehenden Tor-Prozess gefunden …</string>
<string name="something_bad_happened">Etwas ist schief gelaufen. Bitte Protokoll überprüfen</string>
<string name="unable_to_read_hidden_service_name">Name des versteckten Dienstes kann nicht gelesen werden</string>
diff --git a/app-mini/src/main/res/values-el/strings.xml b/app-mini/src/main/res/values-el/strings.xml
index f2606b40..7c546a78 100644
--- a/app-mini/src/main/res/values-el/strings.xml
+++ b/app-mini/src/main/res/values-el/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Κάποια εφαρμογή προσπαθεί να ανοίξει την κρυφή θύρα διακομιστή %1$sστο δίκτυο Tor. Πρόκειται για ασφαλή ενέργεια, εφόσον γνωρίζετε την εφαρμογή.</string>
+ <string name="hidden_service_request">Κάποια εφαρμογή προσπαθεί να ανοίξει την κρυφή θύρα διακομιστή %1$dστο δίκτυο Tor. Πρόκειται για ασφαλή ενέργεια, εφόσον γνωρίζετε την εφαρμογή.</string>
<string name="found_existing_tor_process">αναζήτηση διεργασιών Tor...</string>
<string name="something_bad_happened">Κάτι κακό συνέβη. Ελέγξτε τις καταγραφές</string>
<string name="unable_to_read_hidden_service_name">αδυναμία ανάγνωσης του ονόματος της κρυφής υπηρεσίας</string>
diff --git a/app-mini/src/main/res/values-es-rAR/strings.xml b/app-mini/src/main/res/values-es-rAR/strings.xml
index 4d6dd871..48da7b4f 100644
--- a/app-mini/src/main/res/values-es-rAR/strings.xml
+++ b/app-mini/src/main/res/values-es-rAR/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Una aplicación quiere abrir el puerto del servidor oculto %1$s a la red de tor. Esto es seguro si confías en la aplicación</string>
+ <string name="hidden_service_request">Una aplicación quiere abrir el puerto del servidor oculto %1$d a la red de tor. Esto es seguro si confías en la aplicación</string>
<string name="found_existing_tor_process">encontrado el proceso tor existente</string>
<string name="something_bad_happened">algo malo ha ocurrido. verifica el registro.</string>
<string name="unable_to_start_tor">No se puede iniciar Tor:</string>
diff --git a/app-mini/src/main/res/values-es/strings.xml b/app-mini/src/main/res/values-es/strings.xml
index be58295d..5a22f3f0 100644
--- a/app-mini/src/main/res/values-es/strings.xml
+++ b/app-mini/src/main/res/values-es/strings.xml
@@ -95,7 +95,7 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Una aplicación quiere abrir el puerto %1$s de servidor oculto a la red Tor. Esto es seguro si confía en la aplicación.</string>
+ <string name="hidden_service_request">Una aplicación quiere abrir el puerto %1$d de servidor oculto a la red Tor. Esto es seguro si confía en la aplicación.</string>
<string name="found_existing_tor_process">Se encontró un proceso de Tor ya existente...</string>
<string name="something_bad_happened">Hubo algún tipo de problema. Compruebe el registro (log)</string>
<string name="unable_to_read_hidden_service_name">No fue posible leer el nombre del servicio oculto</string>
diff --git a/app-mini/src/main/res/values-eu/strings.xml b/app-mini/src/main/res/values-eu/strings.xml
index 784d55f3..cf0de00c 100644
--- a/app-mini/src/main/res/values-eu/strings.xml
+++ b/app-mini/src/main/res/values-eu/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Aplikazio batek ezkutuko zerbitzariko %1$s ataka ireki nau du Tor sarera. Segurua da aplikazioaz fidatzen bazara.</string>
+ <string name="hidden_service_request">Aplikazio batek ezkutuko zerbitzariko %1$d ataka ireki nau du Tor sarera. Segurua da aplikazioaz fidatzen bazara.</string>
<string name="found_existing_tor_process">aurreko Tor prozesu bat aurkitu da...</string>
<string name="something_bad_happened">Zerbait txarra gertatu da. Begiratu egunkarian</string>
<string name="unable_to_read_hidden_service_name">ezin izan da ezkutuko zerbitzuaren izena irakurri</string>
diff --git a/app-mini/src/main/res/values-fa/strings.xml b/app-mini/src/main/res/values-fa/strings.xml
index 5549d9a4..6b86539a 100644
--- a/app-mini/src/main/res/values-fa/strings.xml
+++ b/app-mini/src/main/res/values-fa/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy نسخهی 0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">اپلیکیشنی میخواهد پورت سرور %1$s را به شبکه تور بگشاید. در صورتی که به این برنامه اطمینان دارید، چنین کاری امن است.</string>
+ <string name="hidden_service_request">اپلیکیشنی میخواهد پورت سرور %1$d را به شبکه تور بگشاید. در صورتی که به این برنامه اطمینان دارید، چنین کاری امن است.</string>
<string name="found_existing_tor_process">یک تور درحال اجرا پیدا شد...</string>
<string name="something_bad_happened">اتفاق بدی افتاد. وقایع ثبت شده را چک کنید</string>
<string name="unable_to_read_hidden_service_name">ناتوان در خواندن نام سرویس مخفی</string>
diff --git a/app-mini/src/main/res/values-fr/strings.xml b/app-mini/src/main/res/values-fr/strings.xml
index b7864916..b318cf18 100644
--- a/app-mini/src/main/res/values-fr/strings.xml
+++ b/app-mini/src/main/res/values-fr/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9 : https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8 : https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j : http://www.openssl.org</string>
- <string name="hidden_service_request">Une appli veut ouvrir le port %1$s du serveur caché au réseau Tor. Cela est sécuritaire si vous faites confiance à l’appli.</string>
+ <string name="hidden_service_request">Une appli veut ouvrir le port %1$d du serveur caché au réseau Tor. Cela est sécuritaire si vous faites confiance à l’appli.</string>
<string name="found_existing_tor_process">un processus existant de Tor a été trouvé...</string>
<string name="something_bad_happened">Quelque chose n’a pas été. Vérifiez le journal</string>
<string name="unable_to_read_hidden_service_name">impossible de lire le nom du service caché</string>
diff --git a/app-mini/src/main/res/values-gl/strings.xml b/app-mini/src/main/res/values-gl/strings.xml
index 5af10811..040c095b 100644
--- a/app-mini/src/main/res/values-gl/strings.xml
+++ b/app-mini/src/main/res/values-gl/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Unha aplicación quere abrir o porto oculto de servidor %1$s a rede Tor. Esto é seguro se vostede confía na app.</string>
+ <string name="hidden_service_request">Unha aplicación quere abrir o porto oculto de servidor %1$d a rede Tor. Esto é seguro se vostede confía na app.</string>
<string name="found_existing_tor_process">atopado proceso Tor existente...</string>
<string name="something_bad_happened">Algo malo pasou. Comprobe o rexistro</string>
<string name="unable_to_read_hidden_service_name">imposible ler nome de servizo oculto</string>
diff --git a/app-mini/src/main/res/values-hi/strings.xml b/app-mini/src/main/res/values-hi/strings.xml
index 8d683307..c44379b9 100644
--- a/app-mini/src/main/res/values-hi/strings.xml
+++ b/app-mini/src/main/res/values-hi/strings.xml
@@ -95,7 +95,7 @@
<string name="polipo_version">पोलीपो v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">एक ऐप Tor नेटवर्क पर %1$sछिपा सर्वर पोर्ट खोलना चाहता है। यदि आप ऐप पर विश्वास करते हैं, तो यह सुरक्षित है</string>
+ <string name="hidden_service_request">एक ऐप Tor नेटवर्क पर %1$dछिपा सर्वर पोर्ट खोलना चाहता है। यदि आप ऐप पर विश्वास करते हैं, तो यह सुरक्षित है</string>
<string name="found_existing_tor_process">मौजूदा तोर प्रक्रिया पाया ...</string>
<string name="something_bad_happened">कुछ बुरा हो गया। लॉग की जांच करें</string>
<string name="unable_to_read_hidden_service_name">छिपी हुई सेवा का नाम पढ़ने में असमर्थ</string>
diff --git a/app-mini/src/main/res/values-hu/strings.xml b/app-mini/src/main/res/values-hu/strings.xml
index 7fea2a90..0eb6f16d 100644
--- a/app-mini/src/main/res/values-hu/strings.xml
+++ b/app-mini/src/main/res/values-hu/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Egy app egy rejtett szerver portot %1$s nyitna a Tor hálózatra. Ez biztonságos, ha megbízik az appban.</string>
+ <string name="hidden_service_request">Egy app egy rejtett szerver portot %1$d nyitna a Tor hálózatra. Ez biztonságos, ha megbízik az appban.</string>
<string name="found_existing_tor_process">létező Tor folyamat találva...</string>
<string name="something_bad_happened">Valami rossz történt. Nézd meg a naplót.</string>
<string name="unable_to_read_hidden_service_name">nem olvasható a rejtett szolgáltatás neve</string>
diff --git a/app-mini/src/main/res/values-is/strings.xml b/app-mini/src/main/res/values-is/strings.xml
index be6ead32..37de1c93 100644
--- a/app-mini/src/main/res/values-is/strings.xml
+++ b/app-mini/src/main/res/values-is/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Forrit vill opna földu vefgáttina %1$s inn á Tor-netið. Þetta er öruggt ef þú treystir forritinu.</string>
+ <string name="hidden_service_request">Forrit vill opna földu vefgáttina %1$d inn á Tor-netið. Þetta er öruggt ef þú treystir forritinu.</string>
<string name="found_existing_tor_process">fann annað Tor-ferli...</string>
<string name="something_bad_happened">Eitthvað slæmt gerðist. Athugaðu atvikakráninguna</string>
<string name="unable_to_read_hidden_service_name">get ekki lesið heiti földu þjónustunnar</string>
diff --git a/app-mini/src/main/res/values-it/strings.xml b/app-mini/src/main/res/values-it/strings.xml
index d09baf0a..22bec9b2 100644
--- a/app-mini/src/main/res/values-it/strings.xml
+++ b/app-mini/src/main/res/values-it/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Un\'app vuole aprire la porta %1$s del server nascosto alla rete Tor. È un\'azione sicura se ti fidi dell\'app.</string>
+ <string name="hidden_service_request">Un\'app vuole aprire la porta %1$d del server nascosto alla rete Tor. È un\'azione sicura se ti fidi dell\'app.</string>
<string name="found_existing_tor_process">trovato un processo Tor esistente...</string>
<string name="something_bad_happened">E\' accaduto un evento indesiderato. Controllare i log.</string>
<string name="unable_to_read_hidden_service_name">Impossibile leggere il nome del servizio nascosto.</string>
diff --git a/app-mini/src/main/res/values-ja/strings.xml b/app-mini/src/main/res/values-ja/strings.xml
index 9a64bac2..d629ce25 100644
--- a/app-mini/src/main/res/values-ja/strings.xml
+++ b/app-mini/src/main/res/values-ja/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">アプリが非公開サーバーポート %1$s をTorネットワークに開放しようとしています。信頼できるアプリであればこれは安全です。</string>
+ <string name="hidden_service_request">アプリが非公開サーバーポート %1$d をTorネットワークに開放しようとしています。信頼できるアプリであればこれは安全です。</string>
<string name="found_existing_tor_process">Torプロセスを発見</string>
<string name="something_bad_happened">何かが起こりました。ログを確認してください。</string>
<string name="unable_to_read_hidden_service_name">hidden serviceの名前読込不能</string>
diff --git a/app-mini/src/main/res/values-mk/strings.xml b/app-mini/src/main/res/values-mk/strings.xml
index 271f5f7a..93b653d3 100644
--- a/app-mini/src/main/res/values-mk/strings.xml
+++ b/app-mini/src/main/res/values-mk/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Апликација сака да отвори сокриена серверска порта %1$s кон Tor мрежата. Ова е безбедно доколку и верувате на апликацијата.</string>
+ <string name="hidden_service_request">Апликација сака да отвори сокриена серверска порта %1$d кон Tor мрежата. Ова е безбедно доколку и верувате на апликацијата.</string>
<string name="found_existing_tor_process">Пронајден постоечки Tor-процес ...</string>
<string name="something_bad_happened">Се случи грешка. Проверете го дневникот</string>
<string name="unable_to_read_hidden_service_name">не може да се прочита името на скриениот сервис</string>
diff --git a/app-mini/src/main/res/values-nl/strings.xml b/app-mini/src/main/res/values-nl/strings.xml
index f9c88a6f..133a76e7 100644
--- a/app-mini/src/main/res/values-nl/strings.xml
+++ b/app-mini/src/main/res/values-nl/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Een app wil de verborgenserverpoort %1$s tot het Tor-netwerk openen. Dit is veilig als je de app vertrouwt.</string>
+ <string name="hidden_service_request">Een app wil de verborgenserverpoort %1$d tot het Tor-netwerk openen. Dit is veilig als je de app vertrouwt.</string>
<string name="found_existing_tor_process">bestaand Tor-proces gevonden…</string>
<string name="something_bad_happened">Er is een fout opgetreden. Controleer de log</string>
<string name="unable_to_read_hidden_service_name">Kan verborgen dienst-naam niet lezen</string>
diff --git a/app-mini/src/main/res/values-pt-rBR/strings.xml b/app-mini/src/main/res/values-pt-rBR/strings.xml
index e7140d4a..287bd8f2 100644
--- a/app-mini/src/main/res/values-pt-rBR/strings.xml
+++ b/app-mini/src/main/res/values-pt-rBR/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Um aplicativo precisa abrir uma porta tipo servidor escondida %1$spara a Rede Tor. Isso é seguro se você confiar nesta aplicação.</string>
+ <string name="hidden_service_request">Um aplicativo precisa abrir uma porta tipo servidor escondida %1$dpara a Rede Tor. Isso é seguro se você confiar nesta aplicação.</string>
<string name="found_existing_tor_process">procurando processos Tor existentes...</string>
<string name="something_bad_happened">Algo ruim aconteceu. Cheque o lo</string>
<string name="unable_to_read_hidden_service_name">habilitar ler o nome do serviço oculto</string>
diff --git a/app-mini/src/main/res/values-ru/strings.xml b/app-mini/src/main/res/values-ru/strings.xml
index 57a05107..b0665bcc 100644
--- a/app-mini/src/main/res/values-ru/strings.xml
+++ b/app-mini/src/main/res/values-ru/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Приложение хочет открыть скрытый порт сервера %1$s сети Tor. Это безопасно, если вы доверяете данному приложению.</string>
+ <string name="hidden_service_request">Приложение хочет открыть скрытый порт сервера %1$d сети Tor. Это безопасно, если вы доверяете данному приложению.</string>
<string name="found_existing_tor_process">найден существующий процесс Tor...</string>
<string name="something_bad_happened">Произошла какая-то ошибка. Проверьте журнал.</string>
<string name="unable_to_read_hidden_service_name">невозможно прочитать имя скрытой службы</string>
diff --git a/app-mini/src/main/res/values-sr/strings.xml b/app-mini/src/main/res/values-sr/strings.xml
index 6a7d0ce0..5e4df835 100644
--- a/app-mini/src/main/res/values-sr/strings.xml
+++ b/app-mini/src/main/res/values-sr/strings.xml
@@ -92,7 +92,7 @@
<string name="tor_version">Toр: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="hidden_service_request">Апликација жели да отвори сакривен порт%1$s на серверу за Тор мрежу. Ово је сигуран потез уколико верујете апликацији.</string>
+ <string name="hidden_service_request">Апликација жели да отвори сакривен порт%1$d на серверу за Тор мрежу. Ово је сигуран потез уколико верујете апликацији.</string>
<string name="found_existing_tor_process">нађен покренути Тор процес...</string>
<string name="something_bad_happened">Нешто лоше се догодило. Прегледајте логове</string>
<string name="unable_to_read_hidden_service_name">нисам у могућности да прочитам име сакривеног сервиса</string>
diff --git a/app-mini/src/main/res/values-sv/strings.xml b/app-mini/src/main/res/values-sv/strings.xml
index 64e40df6..1a034756 100644
--- a/app-mini/src/main/res/values-sv/strings.xml
+++ b/app-mini/src/main/res/values-sv/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">En app vill öppna dold serverport %1$s till Tor-nätverket. Det här är säkert om du litar på appen.</string>
+ <string name="hidden_service_request">En app vill öppna dold serverport %1$d till Tor-nätverket. Det här är säkert om du litar på appen.</string>
<string name="found_existing_tor_process">hittade existerande Tor process...</string>
<string name="something_bad_happened">Något dåligt hände. Kolla loggen.</string>
<string name="unable_to_read_hidden_service_name">kan inte läsa gömda tjänstens namn</string>
diff --git a/app-mini/src/main/res/values-th/strings.xml b/app-mini/src/main/res/values-th/strings.xml
index 4e06787b..78442bc0 100644
--- a/app-mini/src/main/res/values-th/strings.xml
+++ b/app-mini/src/main/res/values-th/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">โปรแกรมต้องการเปิดพอร์ต %1$s ที่ซ่อนอยู่ของเซิร์ฟเวอร์ให้เชื่อมกับเครือข่าย Tor การกระทำนี้ปลอดภัยถ้าคุณเชื่อถือโปรแกรมนั้น</string>
+ <string name="hidden_service_request">โปรแกรมต้องการเปิดพอร์ต %1$d ที่ซ่อนอยู่ของเซิร์ฟเวอร์ให้เชื่อมกับเครือข่าย Tor การกระทำนี้ปลอดภัยถ้าคุณเชื่อถือโปรแกรมนั้น</string>
<string name="found_existing_tor_process">พบกระบวนการ Tor ที่มีอยู่แล้ว...</string>
<string name="something_bad_happened">เกิดอะไรไม่ดีสักอย่าง ให้ตรวจดูจากบันทึก</string>
<string name="unable_to_read_hidden_service_name">ไม่สามารถอ่านชื่อของบริการที่ซ่อน</string>
diff --git a/app-mini/src/main/res/values-tr/strings.xml b/app-mini/src/main/res/values-tr/strings.xml
index 83146a18..803de7c2 100644
--- a/app-mini/src/main/res/values-tr/strings.xml
+++ b/app-mini/src/main/res/values-tr/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Bir uygulama Tor ağına %1$s gizli sunucu kapısını açmak istiyor. Uygulamaya güveniyorsanız bu işlem güvenlidir.</string>
+ <string name="hidden_service_request">Bir uygulama Tor ağına %1$d gizli sunucu kapısını açmak istiyor. Uygulamaya güveniyorsanız bu işlem güvenlidir.</string>
<string name="found_existing_tor_process">varolan bir Tor işlemi bulundu...</string>
<string name="something_bad_happened">Bir şeyler ters gitti. Günlük kayıtlarına bakın</string>
<string name="unable_to_read_hidden_service_name">gizli hizmet adı okunamadı</string>
diff --git a/app-mini/src/main/res/values-uk/strings.xml b/app-mini/src/main/res/values-uk/strings.xml
index 253fa225..98189232 100644
--- a/app-mini/src/main/res/values-uk/strings.xml
+++ b/app-mini/src/main/res/values-uk/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Програма хоче відкрити прихований серверний порт %1$s у мережу Tor. Це безпечно, якщо ви довіряєте застосунку.</string>
+ <string name="hidden_service_request">Програма хоче відкрити прихований серверний порт %1$d у мережу Tor. Це безпечно, якщо ви довіряєте застосунку.</string>
<string name="found_existing_tor_process">знайдено існуючий процес Tor...</string>
<string name="something_bad_happened">Виникла якась помилка. Перевірте лог</string>
<string name="unable_to_read_hidden_service_name">неможливо прочитати ім\'я прихованої служби</string>
diff --git a/app-mini/src/main/res/values-zh-rTW/strings.xml b/app-mini/src/main/res/values-zh-rTW/strings.xml
index 62bae828..322b8464 100644
--- a/app-mini/src/main/res/values-zh-rTW/strings.xml
+++ b/app-mini/src/main/res/values-zh-rTW/strings.xml
@@ -94,7 +94,7 @@
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">有一個應用要開啟隱藏的伺服器端口 %1$s 到 Tor 網路,如果信得過此應用才進行此操作</string>
+ <string name="hidden_service_request">有一個應用要開啟隱藏的伺服器端口 %1$d 到 Tor 網路,如果信得過此應用才進行此操作</string>
<string name="found_existing_tor_process">發現已有 Tor 程序運行中 ...</string>
<string name="something_bad_happened">發生錯誤。檢視日誌檔</string>
<string name="unable_to_read_hidden_service_name">無法讀取隱藏服務的名稱</string>
diff --git a/app-mini/src/main/res/values/strings.xml b/app-mini/src/main/res/values/strings.xml
index 4267588b..11128311 100644
--- a/app-mini/src/main/res/values/strings.xml
+++ b/app-mini/src/main/res/values/strings.xml
@@ -102,7 +102,7 @@
<string name="polipo_version">Polipo: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL: http://www.openssl.org</string>
- <string name="hidden_service_request">An app wants to open onion server port %1$s to the Tor network. This is safe if you trust the app.</string>
+ <string name="hidden_service_request">An app wants to open onion server port %1$d to the Tor network. This is safe if you trust the app.</string>
<string name="found_existing_tor_process">found existing Tor process…</string>
<string name="something_bad_happened">Something bad happened. Check the log</string>
<string name="unable_to_read_hidden_service_name">unable to read onion service name</string>
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 79668887..d6b6daa8 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -675,7 +675,7 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
if (name == null) name = "v3" + v3LocalPort;
final String finalName = name;
new AlertDialog.Builder(this)
- .setMessage(getString(R.string.hidden_service_request, String.valueOf(v3LocalPort)))
+ .setMessage(getString(R.string.hidden_service_request, v3LocalPort))
.setPositiveButton(R.string.allow, (d, w) -> enableV3OnionService(v3LocalPort, v3onionPort, finalName))
.setNegativeButton(R.string.deny, (d, w) -> d.dismiss())
.show();
@@ -689,7 +689,7 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
final Boolean v2authCookie = intent.getBooleanExtra("hs_auth_cookie", false);
final Uri v2KeyUri = intent.getData();
- String v2RequestMsg = getString(R.string.hidden_service_request, String.valueOf(v2hiddenServicePort));
+ String v2RequestMsg = getString(R.string.hidden_service_request, v2hiddenServicePort);
new AlertDialog.Builder(this).setMessage(v2RequestMsg)
.setPositiveButton(R.string.allow, (dialog, which) -> enableHiddenServicePortV2(
v2hiddenServiceName, v2hiddenServicePort,
diff --git a/app/src/main/res/values-ay/strings.xml b/app/src/main/res/values-ay/strings.xml
index 71ec20aa..04c8ca25 100644
--- a/app/src/main/res/values-ay/strings.xml
+++ b/app/src/main/res/values-ay/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Imantat apayañ thakhinak Tor llikar mä wakichäwiw jist\'arañ muni %1$s. Wakichawitix uñt\'atachixa, iyaw sama.</string>
+ <string name="hidden_service_request">Imantat apayañ thakhinak Tor llikar mä wakichäwiw jist\'arañ muni %1$d. Wakichawitix uñt\'atachixa, iyaw sama.</string>
<string name="found_existing_tor_process">Utjir Toraw jikxatata…</string>
<string name="something_bad_happened">Mä jan walt\'äwiw utji. Qillqantayasit uñakipam</string>
<string name="unable_to_read_hidden_service_name">Janiw imantat yanapirin sutiman ullarañjamakänti</string>
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 03b2c9dd..4791fe1c 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Дадатак хоча адкрыць схаваны порт сервера %1$s сеткі Tor. Гэта бяспечна, калі вы давяраеце дадзенаму дадатку.</string>
+ <string name="hidden_service_request">Дадатак хоча адкрыць схаваны порт сервера %1$d сеткі Tor. Гэта бяспечна, калі вы давяраеце дадзенаму дадатку.</string>
<string name="found_existing_tor_process">знойдзены існавалы працэс Tor…</string>
<string name="something_bad_happened">Адбылася нейкая памылка. Праверце журнал.</string>
<string name="unable_to_read_hidden_service_name">немагчыма прачытаць імя схаванай службы</string>
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 607cb861..4c6feb6a 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Una aplicació vol obrir el port de servidor ocults%1$s a la xarxa Tor. Això és segur si confieu en l\'aplicació.</string>
+ <string name="hidden_service_request">Una aplicació vol obrir el port de servidor ocults%1$d a la xarxa Tor. Això és segur si confieu en l\'aplicació.</string>
<string name="found_existing_tor_process">s\'ha trobat un procés Tor existent…</string>
<string name="something_bad_happened">Ha fallat alguna cosa. Comproveu el registre</string>
<string name="unable_to_read_hidden_service_name">ha estat impossible llegir el nom del servei ocult</string>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index cb2d6016..ce02ae6e 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Eine Anwendung möchte den Versteckten Server-Anschluss %1$s zum Tor-Netz öffnen. Dies ist sicher, wenn Sie der Anwendung vertrauen.</string>
+ <string name="hidden_service_request">Eine Anwendung möchte den Versteckten Server-Anschluss %1$d zum Tor-Netz öffnen. Dies ist sicher, wenn Sie der Anwendung vertrauen.</string>
<string name="found_existing_tor_process">bestehenden Tor-Prozess gefunden …</string>
<string name="something_bad_happened">Etwas ist schief gelaufen. Bitte Protokoll überprüfen</string>
<string name="unable_to_read_hidden_service_name">Name des versteckten Dienstes kann nicht gelesen werden</string>
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index d17e9200..08b608ea 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Κάποια εφαρμογή προσπαθεί να ανοίξει την κρυφή θύρα διακομιστή %1$sστο δίκτυο Tor. Πρόκειται για ασφαλή ενέργεια, εφόσον γνωρίζετε την εφαρμογή.</string>
+ <string name="hidden_service_request">Κάποια εφαρμογή προσπαθεί να ανοίξει την κρυφή θύρα διακομιστή %1$dστο δίκτυο Tor. Πρόκειται για ασφαλή ενέργεια, εφόσον γνωρίζετε την εφαρμογή.</string>
<string name="found_existing_tor_process">αναζήτηση διεργασιών Tor…</string>
<string name="something_bad_happened">Κάτι κακό συνέβη. Ελέγξτε τις καταγραφές</string>
<string name="unable_to_read_hidden_service_name">αδυναμία ανάγνωσης του ονόματος της κρυφής υπηρεσίας</string>
diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml
index b3f1e95a..0a7e5346 100644
--- a/app/src/main/res/values-es-rAR/strings.xml
+++ b/app/src/main/res/values-es-rAR/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Una aplicación quiere abrir el puerto del servidor oculto %1$s a la red de tor. Esto es seguro si confías en la aplicación</string>
+ <string name="hidden_service_request">Una aplicación quiere abrir el puerto del servidor oculto %1$d a la red de tor. Esto es seguro si confías en la aplicación</string>
<string name="found_existing_tor_process">encontrado el proceso tor existente</string>
<string name="something_bad_happened">algo malo ha ocurrido. verifica el registro.</string>
<string name="unable_to_start_tor">No se puede iniciar Tor:</string>
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 8f46c1e5..f024c4d2 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Una aplicación quiere abrir el puerto %1$s de servidor oculto a la red Tor. Esto es seguro si confía en la aplicación.</string>
+ <string name="hidden_service_request">Una aplicación quiere abrir el puerto %1$d de servidor oculto a la red Tor. Esto es seguro si confía en la aplicación.</string>
<string name="found_existing_tor_process">Se encontró un proceso de Tor ya existente…</string>
<string name="something_bad_happened">Hubo algún tipo de problema. Compruebe el registro (log)</string>
<string name="unable_to_read_hidden_service_name">No fue posible leer el nombre del servicio oculto</string>
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index c423c9e3..35ccaf46 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Aplikazio batek ezkutuko zerbitzariko %1$s ataka ireki nau du Tor sarera. Segurua da aplikazioaz fidatzen bazara.</string>
+ <string name="hidden_service_request">Aplikazio batek ezkutuko zerbitzariko %1$d ataka ireki nau du Tor sarera. Segurua da aplikazioaz fidatzen bazara.</string>
<string name="found_existing_tor_process">aurreko Tor prozesu bat aurkitu da…</string>
<string name="something_bad_happened">Zerbait txarra gertatu da. Begiratu egunkarian</string>
<string name="unable_to_read_hidden_service_name">ezin izan da ezkutuko zerbitzuaren izena irakurri</string>
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 21c93880..8ff97f93 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy نسخهی 0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">اپلیکیشنی میخواهد پورت سرور %1$s را به شبکه تور بگشاید. در صورتی که به این برنامه اطمینان دارید، چنین کاری امن است.</string>
+ <string name="hidden_service_request">اپلیکیشنی میخواهد پورت سرور %1$d را به شبکه تور بگشاید. در صورتی که به این برنامه اطمینان دارید، چنین کاری امن است.</string>
<string name="found_existing_tor_process">یک تور درحال اجرا پیدا شد…</string>
<string name="something_bad_happened">اتفاق بدی افتاد. وقایع ثبت شده را چک کنید</string>
<string name="unable_to_read_hidden_service_name">ناتوان در خواندن نام سرویس مخفی</string>
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 6b305bec..3fc51740 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -127,7 +127,7 @@
<string name="wizard_details_msg">Orbot on avoimen lähdekoodin sovellus, joka sisältää Tor, Obfs4Proxy, BadVPN Tun2Socks, LibEvent ja Polipo. Se tarjoaa paikallisen HTTP-välityspalvelimen (8118) ja SOCKS-välityspalvelimen (9050) Tor-verkkoon. Orbotilla on myös ominaisuus, rootattulla laitteella, lähettää kaiken Internet-liikenteen Torin kautta.</string>
<string name="obfsproxy_version">Obfs4proxy: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL: http://www.openssl.org</string>
- <string name="hidden_service_request">Sovellus haluaa avata sipulipalvelimen portin %1$s Tor-verkkoon. Tämä on turvallista, jos luotat sovellukseen.</string>
+ <string name="hidden_service_request">Sovellus haluaa avata sipulipalvelimen portin %1$d Tor-verkkoon. Tämä on turvallista, jos luotat sovellukseen.</string>
<string name="pref_http_title">Tori HTTP</string>
<string name="pref_http_summary">Portti, jossa Tor tarjoaa HTTP-välityspalvelimen (oletus: 8118 tai 0 poistaa käytöstä)</string>
<string name="pref_http_dialog">HTTP-portin määritys</string>
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index ce1515f4..ded7bbd1 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -121,7 +121,7 @@
<string name="wizard_details_msg">Orbot est une application à code source ouvert qui comprend Tor, Obfs4Proxy, BadVPN Tun2Socks et LibEvent. Elle fournit un mandataire HTTP local (8118) et un mandataire SOCKS (9050) vers le réseau Tor. Sur un appareil débridé, Orbot peut aussi faire passer tout le trafic Internet par Tor.</string>
<string name="obfsproxy_version">Obfs4proxy : https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL : http://www.openssl.org</string>
- <string name="hidden_service_request">Une appli veut ouvrir le serveur onion sur le port %1$s au réseau Tor. Cette action est sûre si vous faites confiance à cette appli.</string>
+ <string name="hidden_service_request">Une appli veut ouvrir le serveur onion sur le port %1$d au réseau Tor. Cette action est sûre si vous faites confiance à cette appli.</string>
<string name="pref_open_proxy_on_all_interfaces_title">Ouvrir le mandataire sur toutes les interfaces</string>
<string name="pref_open_proxy_on_all_interfaces_summary">Autoriser l’accès à Tor aux pairs Wi-Fi, aux appareils qui utilisent la fonction modem et à quiconque peut se connecter à votre IP</string>
<string name="pref_http_title">HTTP Tor</string>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 61b8c708..3d376bb3 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21 : http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8 : https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j : http://www.openssl.org</string>
- <string name="hidden_service_request">Une appli veut ouvrir le port %1$s du serveur caché au réseau Tor. Cela est sécuritaire si vous faites confiance à l’appli.</string>
+ <string name="hidden_service_request">Une appli veut ouvrir le port %1$d du serveur caché au réseau Tor. Cela est sécuritaire si vous faites confiance à l’appli.</string>
<string name="found_existing_tor_process">un processus existant de Tor a été trouvé…</string>
<string name="something_bad_happened">Quelque chose n’a pas été. Vérifiez le journal</string>
<string name="unable_to_read_hidden_service_name">impossible de lire le nom du service caché</string>
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 2be73e6d..6f135252 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Unha aplicación quere abrir o porto oculto de servidor %1$s a rede Tor. Esto é seguro se vostede confía na app.</string>
+ <string name="hidden_service_request">Unha aplicación quere abrir o porto oculto de servidor %1$d a rede Tor. Esto é seguro se vostede confía na app.</string>
<string name="found_existing_tor_process">atopado proceso Tor existente…</string>
<string name="something_bad_happened">Algo malo pasou. Comprobe o rexistro</string>
<string name="unable_to_read_hidden_service_name">imposible ler nome de servizo oculto</string>
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index ab88c619..84e33502 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -90,7 +90,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">एक ऐप Tor नेटवर्क पर %1$sछिपा सर्वर पोर्ट खोलना चाहता है। यदि आप ऐप पर विश्वास करते हैं, तो यह सुरक्षित है</string>
+ <string name="hidden_service_request">एक ऐप Tor नेटवर्क पर %1$dछिपा सर्वर पोर्ट खोलना चाहता है। यदि आप ऐप पर विश्वास करते हैं, तो यह सुरक्षित है</string>
<string name="found_existing_tor_process">मौजूदा तोर प्रक्रिया पाया …</string>
<string name="something_bad_happened">कुछ बुरा हो गया। लॉग की जांच करें</string>
<string name="unable_to_read_hidden_service_name">छिपी हुई सेवा का नाम पढ़ने में असमर्थ</string>
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index a3ca7c0d..d26e0456 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Egy app egy rejtett szerver portot %1$s nyitna a Tor hálózatra. Ez biztonságos, ha megbízik az appban.</string>
+ <string name="hidden_service_request">Egy app egy rejtett szerver portot %1$d nyitna a Tor hálózatra. Ez biztonságos, ha megbízik az appban.</string>
<string name="found_existing_tor_process">létező Tor folyamat találva…</string>
<string name="something_bad_happened">Valami rossz történt. Nézd meg a naplót.</string>
<string name="unable_to_read_hidden_service_name">nem olvasható a rejtett szolgáltatás neve</string>
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index 5930de5d..da866d6b 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Forrit vill opna onion-netþjón á gáttinni %1$s inn á Tor-netið. Þetta er öruggt ef þú treystir forritinu.</string>
+ <string name="hidden_service_request">Forrit vill opna onion-netþjón á gáttinni %1$d inn á Tor-netið. Þetta er öruggt ef þú treystir forritinu.</string>
<string name="found_existing_tor_process">fann annað Tor-ferli…</string>
<string name="something_bad_happened">Eitthvað slæmt gerðist. Athugaðu atvikakráninguna</string>
<string name="unable_to_read_hidden_service_name">get ekki lesið heiti földu þjónustunnar</string>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 8193a110..cae2c4fa 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Un\'app vuole aprire la porta %1$s del server nascosto alla rete Tor. È un\'azione sicura se ti fidi dell\'app.</string>
+ <string name="hidden_service_request">Un\'app vuole aprire la porta %1$d del server nascosto alla rete Tor. È un\'azione sicura se ti fidi dell\'app.</string>
<string name="found_existing_tor_process">trovato un processo Tor esistente…</string>
<string name="something_bad_happened">E\' accaduto un evento indesiderato. Controllare i log</string>
<string name="unable_to_read_hidden_service_name">Impossibile leggere il nome del servizio onion</string>
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 10c86ee0..2cf761b9 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">アプリが非公開サーバーポート %1$s をTorネットワークに開放しようとしています。信頼できるアプリであればこれは安全です。</string>
+ <string name="hidden_service_request">アプリが非公開サーバーポート %1$d をTorネットワークに開放しようとしています。信頼できるアプリであればこれは安全です。</string>
<string name="found_existing_tor_process">Torプロセスを発見</string>
<string name="something_bad_happened">何かが起こりました。ログを確認してください。</string>
<string name="unable_to_read_hidden_service_name">hidden serviceの名前読込不能</string>
diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml
index e1d0fc21..e4c4e643 100644
--- a/app/src/main/res/values-mk/strings.xml
+++ b/app/src/main/res/values-mk/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Апликација сака да отвори сокриена серверска порта %1$s кон Tor мрежата. Ова е безбедно доколку и верувате на апликацијата.</string>
+ <string name="hidden_service_request">Апликација сака да отвори сокриена серверска порта %1$d кон Tor мрежата. Ова е безбедно доколку и верувате на апликацијата.</string>
<string name="found_existing_tor_process">Пронајден постоечки Tor-процес …</string>
<string name="something_bad_happened">Се случи грешка. Проверете го дневникот</string>
<string name="unable_to_read_hidden_service_name">не може да се прочита името на скриениот сервис</string>
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 567d1c13..6356db3a 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -152,7 +152,7 @@
<string name="full_device_vpn">VPN for hele enheten</string>
<string name="vpn_disabled">VPN Deaktivert</string>
<string name="wizard_details_msg">Orbot er et fritt program som inneholder Tor, Obfs4Proxy, BadVPN Tun2Socks, LibEvent og Polipo. Den gir en lokal HTTP-proxy (8118) og en SOCKS-mellomtjener (9050) inn i Tor-nettverket. Orbot har også muligheten til å sende all Internett-trafikk gjennom Tor på enheter med superbrukertilgang.</string>
- <string name="hidden_service_request">Et program ønsker å åpne løktjenerport %1$s til Tor-nettverket. Dette er trygt såfremt du stoler på programmet.</string>
+ <string name="hidden_service_request">Et program ønsker å åpne løktjenerport %1$d til Tor-nettverket. Dette er trygt såfremt du stoler på programmet.</string>
<string name="pref_open_proxy_on_all_interfaces_title">Åpne proxy på alle grensesnitt</string>
<string name="pref_http_title">Tor HTTP</string>
<string name="menu_new_identity">Ny identitet</string>
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 509a2003..f1ddfbe7 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Een app wil de verborgenserverpoort %1$s tot het Tor-netwerk openen. Dit is veilig als je de app vertrouwt.</string>
+ <string name="hidden_service_request">Een app wil de verborgenserverpoort %1$d tot het Tor-netwerk openen. Dit is veilig als je de app vertrouwt.</string>
<string name="found_existing_tor_process">bestaand Tor-proces gevonden…</string>
<string name="something_bad_happened">Er is een fout opgetreden. Controleer de log</string>
<string name="unable_to_read_hidden_service_name">Kan verborgen dienst-naam niet lezen</string>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 299f7f6f..f8d686a3 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -152,7 +152,7 @@
<string name="backup_restored">Przywrócono kopię zapasową</string>
<string name="backup_saved_at_external_storage">Kopia zapasowa zapisywana w pamięci zewnętrznej</string>
<string name="backup_service">Usługa tworzenia kopii zapasowych</string>
- <string name="hidden_service_request">Aplikacja chce otworzyć port serwera cebulowego %1$s do sieci Tor. Jest to bezpieczne, jeśli zaufasz aplikacji.</string>
+ <string name="hidden_service_request">Aplikacja chce otworzyć port serwera cebulowego %1$d do sieci Tor. Jest to bezpieczne, jeśli zaufasz aplikacji.</string>
<string name="client_cookies">Klient cookies</string>
<string name="auth_cookie">Autoryzacja cookie</string>
<string name="show_auth_cookie">Pokaż autoryzację cookie</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index b5af88be..7a0ce2d6 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Um aplicativo quer abrir uma porta no servidor onion %1$s para a rede Tor. É seguro caso você confie neste aplicativo.</string>
+ <string name="hidden_service_request">Um aplicativo quer abrir uma porta no servidor onion %1$d para a rede Tor. É seguro caso você confie neste aplicativo.</string>
<string name="found_existing_tor_process">processos Tor existentes foram encontrados…</string>
<string name="something_bad_happened">Algo ruim aconteceu. Verifique o registro de log</string>
<string name="unable_to_read_hidden_service_name">incapaz de ler o nome do serviço onion</string>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index e0221764..8eb9aee7 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -163,7 +163,7 @@
<string name="pref_disable_network_title">Sem Rede, Modo de Latência Automática</string>
<string name="pref_use_expanded_notifications">Mostrar as notificação expandida com o Tor, país de saída e o IP</string>
<string name="pref_use_persistent_notifications">Mantenha sempre um ícone na barra de ferramentas quando o Orbot estiver conectado</string>
- <string name="hidden_service_request">Uma aplicação quer abrir uma porta do servidor onion %1$s para a rede Tor. É seguro caso confie nesta aplicação.</string>
+ <string name="hidden_service_request">Uma aplicação quer abrir uma porta do servidor onion %1$d para a rede Tor. É seguro caso confie nesta aplicação.</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">Ativar os registos de depuração para saída (deve usar adb ou aLogCat para ver)</string>
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 4d497c77..3ffa1416 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -153,7 +153,7 @@
<string name="pref_disable_network_title">Sem Rede, Modo de Latência Automática</string>
<string name="pref_use_expanded_notifications">Mostrar as notificação expandida com o Tor, país de saída e o IP</string>
<string name="pref_use_persistent_notifications">Mantenha sempre um ícone na barra de ferramentas quando o Orbot estiver conectado</string>
- <string name="hidden_service_request">Uma app quer abrir uma porta do servidor onion %1$s para a rede Tor. É seguro caso confie nesta app.</string>
+ <string name="hidden_service_request">Uma app quer abrir uma porta do servidor onion %1$d para a rede Tor. É seguro caso confie nesta app.</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">Ativar os registos de depuração para saída (deve usar adb ou aLogCat para ver)</string>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index f1b8469e..2b712352 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Приложение хочет открыть скрытый порт сервера %1$s сети Tor. Это безопасно, если вы доверяете данному приложению.</string>
+ <string name="hidden_service_request">Приложение хочет открыть скрытый порт сервера %1$d сети Tor. Это безопасно, если вы доверяете данному приложению.</string>
<string name="found_existing_tor_process">найден существующий процесс Tor…</string>
<string name="something_bad_happened">Произошла какая-то ошибка. Проверьте журнал.</string>
<string name="unable_to_read_hidden_service_name">невозможно прочитать имя скрытой службы</string>
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 580458fc..52157f97 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -87,7 +87,7 @@
<string name="third_party_software">Софтвер од стране неслужбених издавача:</string>
<string name="tor_version">Toр: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="hidden_service_request">Апликација жели да отвори сакривен порт%1$s на серверу за Тор мрежу. Ово је сигуран потез уколико верујете апликацији.</string>
+ <string name="hidden_service_request">Апликација жели да отвори сакривен порт%1$d на серверу за Тор мрежу. Ово је сигуран потез уколико верујете апликацији.</string>
<string name="found_existing_tor_process">нађен покренути Тор процес…</string>
<string name="something_bad_happened">Нешто лоше се догодило. Прегледајте логове</string>
<string name="unable_to_read_hidden_service_name">нисам у могућности да прочитам име сакривеног сервиса</string>
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index d4ed952d..02ce16f4 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">En app vill öppna dold serverport %1$s till Tor-nätverket. Det här är säkert om du litar på appen.</string>
+ <string name="hidden_service_request">En app vill öppna dold serverport %1$d till Tor-nätverket. Det här är säkert om du litar på appen.</string>
<string name="found_existing_tor_process">hittade existerande Tor process…</string>
<string name="something_bad_happened">Något dåligt hände. Kolla loggen</string>
<string name="unable_to_read_hidden_service_name">kan inte läsa gömda tjänstens namn</string>
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 7de29016..b54cc82e 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">โปรแกรมต้องการเปิดพอร์ต %1$s ที่ซ่อนอยู่ของเซิร์ฟเวอร์ให้เชื่อมกับเครือข่าย Tor การกระทำนี้ปลอดภัยถ้าคุณเชื่อถือโปรแกรมนั้น</string>
+ <string name="hidden_service_request">โปรแกรมต้องการเปิดพอร์ต %1$d ที่ซ่อนอยู่ของเซิร์ฟเวอร์ให้เชื่อมกับเครือข่าย Tor การกระทำนี้ปลอดภัยถ้าคุณเชื่อถือโปรแกรมนั้น</string>
<string name="found_existing_tor_process">พบกระบวนการ Tor ที่มีอยู่แล้ว…</string>
<string name="something_bad_happened">เกิดอะไรไม่ดีสักอย่าง ให้ตรวจดูจากบันทึก</string>
<string name="unable_to_read_hidden_service_name">ไม่สามารถอ่านชื่อของบริการที่ซ่อน</string>
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 16f288af..00448b24 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Bir uygulama %1$s numaralı bağlantı noktasındaki onion sunucusunu Tor ağına açmak istiyor. Uygulamaya güveniyorsanız bu güvenlidir.</string>
+ <string name="hidden_service_request">Bir uygulama %1$d numaralı bağlantı noktasındaki onion sunucusunu Tor ağına açmak istiyor. Uygulamaya güveniyorsanız bu güvenlidir.</string>
<string name="found_existing_tor_process">varolan bir Tor işlemi bulundu…</string>
<string name="something_bad_happened">Bir şeyler ters gitti. Günlük kayıtlarına bakın</string>
<string name="unable_to_read_hidden_service_name">gizli hizmet adı okunamadı</string>
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 407706c2..241ddaed 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">Програма хоче відкрити прихований сервер на порту %1$s у мережу Tor. Це безпечно, якщо ви довіряєте застосунку.</string>
+ <string name="hidden_service_request">Програма хоче відкрити прихований сервер на порту %1$d у мережу Tor. Це безпечно, якщо ви довіряєте застосунку.</string>
<string name="found_existing_tor_process">знайдено наявний процес Tor…</string>
<string name="something_bad_happened">Виникла якась помилка. Перевірте лог</string>
<string name="unable_to_read_hidden_service_name">неможливо прочитати ім\'я прихованої служби</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 27f07983..77153306 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -181,7 +181,7 @@
<string name="menu_hidden_services">洋葱服务</string>
<string name="title_activity_hidden_services">洋葱服务</string>
<string name="hidden_services">洋葱服务</string>
- <string name="hidden_service_request">一个应用程序想要在端口%1$s上打开到 Tor 网络的洋葱服务器。如果你信任这个应用程序,这是安全的。</string>
+ <string name="hidden_service_request">一个应用程序想要在端口%1$d上打开到 Tor 网络的洋葱服务器。如果你信任这个应用程序,这是安全的。</string>
<string name="pref_connection_padding">连接填充</string>
<string name="hosted_services">托管的服务</string>
<string name="onion">.onion 地址</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 5b047569..312a1f54 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -89,7 +89,7 @@
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
- <string name="hidden_service_request">有一個應用要開啟隱藏的伺服器端口 %1$s 到 Tor 網路,如果信得過此應用才進行此操作</string>
+ <string name="hidden_service_request">有一個應用要開啟隱藏的伺服器端口 %1$d 到 Tor 網路,如果信得過此應用才進行此操作</string>
<string name="found_existing_tor_process">發現已有 Tor 程序運行中 …</string>
<string name="something_bad_happened">發生錯誤。檢視日誌檔</string>
<string name="unable_to_read_hidden_service_name">無法讀取隱藏服務的名稱</string>
1
0

22 Dec '21
commit f738497736188578a0b746eb35d843d0bb3f9b30
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Fri Dec 13 22:34:47 2019 +0100
use new jtorctl constants for Tor signal names
Tor now prefers its own names, rather than the POSIX names, e.g. SHUTDOWN
rather than HALT or RELOAD instead of HUP.
---
.../org/torproject/android/mini/MiniMainActivity.java | 5 +++--
.../java/org/torproject/android/OrbotMainActivity.java | 3 ++-
.../android/ui/onboarding/CustomBridgesActivity.java | 4 +++-
.../torproject/android/ui/onboarding/MoatActivity.java | 6 ++++--
.../org/torproject/android/service/OrbotService.java | 18 +++++++++---------
.../android/service/TorServiceConstants.java | 2 --
6 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
index 26b17fdf..34d3d10d 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
@@ -50,6 +50,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
+import net.freehaven.tor.control.TorControlCommands;
import org.json.JSONArray;
import org.torproject.android.core.Languages;
import org.torproject.android.core.LocaleHelper;
@@ -680,7 +681,7 @@ public class MiniMainActivity extends AppCompatActivity implements OrbotConstant
}
private void requestTorRereadConfig() {
- sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
+ sendIntentToService(TorControlCommands.SIGNAL_RELOAD);
}
@Override
@@ -875,7 +876,7 @@ public class MiniMainActivity extends AppCompatActivity implements OrbotConstant
}
private void requestNewTorIdentity() {
- sendIntentToService(TorServiceConstants.CMD_NEWNYM);
+ sendIntentToService(TorControlCommands.SIGNAL_NEWNYM);
Rotate3dAnimation rotation = new Rotate3dAnimation(ROTATE_FROM, ROTATE_TO, imgStatus.getWidth() / 2f, imgStatus.getWidth() / 2f, 20f, false);
rotation.setFillAfter(true);
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index d6b6daa8..0bb5be44 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -41,6 +41,7 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
+import net.freehaven.tor.control.TorControlCommands;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SwitchCompat;
@@ -832,7 +833,7 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
}
private void requestTorRereadConfig() {
- sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
+ sendIntentToService(TorControlCommands.SIGNAL_RELOAD);
}
@Override
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
index f20ba4ff..9b668413 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
@@ -26,6 +26,8 @@ import androidx.appcompat.widget.Toolbar;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
+import net.freehaven.tor.control.TorControlCommands;
+
import org.json.JSONArray;
import org.torproject.android.R;
import org.torproject.android.core.ClipboardUtils;
@@ -191,7 +193,7 @@ public class CustomBridgesActivity extends AppCompatActivity implements TextWatc
Prefs.putBridgesEnabled(bridges != null);
Intent intent = new Intent(this, OrbotService.class);
- intent.setAction(TorServiceConstants.CMD_SIGNAL_HUP);
+ intent.setAction(TorControlCommands.SIGNAL_RELOAD);
startService(intent);
}
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
index 2bb0807e..165b1a63 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
@@ -40,6 +40,8 @@ import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
+import net.freehaven.tor.control.TorControlCommands;
+
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -328,7 +330,7 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
Prefs.setBridgesList(sb.toString());
Prefs.putBridgesEnabled(true);
- sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
+ sendIntentToService(TorControlCommands.SIGNAL_RELOAD);
mSuccess = true;
setResult(RESULT_OK);
@@ -422,7 +424,7 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
// mQueue = Volley.newRequestQueue(this, new ProxiedHurlStack(host, port));
- sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
+ sendIntentToService(TorControlCommands.SIGNAL_RELOAD);
if (mCaptcha == null) {
fetchCaptcha();
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
index 396881d3..844da292 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
@@ -235,7 +235,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
mNotifyBuilder.mActions.clear(); // clear out NEWNYM action
if (conn != null) { // only add new identity action when there is a connection
- Intent intentRefresh = new Intent(CMD_NEWNYM);
+ Intent intentRefresh = new Intent(TorControlCommands.SIGNAL_NEWNYM);
PendingIntent pendingIntentNewNym = PendingIntent.getBroadcast(this, 0, intentRefresh, PendingIntent.FLAG_UPDATE_CURRENT);
mNotifyBuilder.addAction(R.drawable.ic_refresh_white_24dp, getString(R.string.menu_new_identity), pendingIntentNewNym);
}
@@ -421,7 +421,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
try {
logNotice("sending HALT signal to Tor process");
- conn.shutdownTor("SHUTDOWN");
+ conn.shutdownTor(TorControlCommands.SIGNAL_SHUTDOWN);
} catch (IOException e) {
Log.d(OrbotConstants.TAG, "error shutting down Tor via connection", e);
@@ -448,9 +448,9 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
private void requestTorRereadConfig() {
try {
- if (conn != null)
- conn.signal("HUP");
-
+ if (conn != null) {
+ conn.signal(TorControlCommands.SIGNAL_RELOAD);
+ }
} catch (IOException e) {
e.printStackTrace();
}
@@ -507,7 +507,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
// registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
IntentFilter filter = new IntentFilter();
- filter.addAction(CMD_NEWNYM);
+ filter.addAction(TorControlCommands.SIGNAL_NEWNYM);
filter.addAction(CMD_ACTIVE);
mActionBroadcastReceiver = new ActionBroadcastReceiver();
registerReceiver(mActionBroadcastReceiver, filter);
@@ -1588,9 +1588,9 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
mVpnManager.handleIntent(new Builder(), mIntent);
} else if (action.equals(ACTION_STATUS)) {
replyWithStatus(mIntent);
- } else if (action.equals(CMD_SIGNAL_HUP)) {
+ } else if (action.equals(TorControlCommands.SIGNAL_RELOAD)) {
requestTorRereadConfig();
- } else if (action.equals(CMD_NEWNYM)) {
+ } else if (action.equals(TorControlCommands.SIGNAL_NEWNYM)) {
newIdentity();
} else if (action.equals(CMD_ACTIVE)) {
sendSignalActive();
@@ -1606,7 +1606,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
private class ActionBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
- case CMD_NEWNYM: {
+ case TorControlCommands.SIGNAL_NEWNYM: {
newIdentity();
break;
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
index d2dc4877..d2a71788 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
@@ -93,8 +93,6 @@ public interface TorServiceConstants {
String STATUS_STARTS_DISABLED = "STARTS_DISABLED";
// actions for internal command Intents
- String CMD_SIGNAL_HUP = "signal_hup";
- String CMD_NEWNYM = "newnym";
String CMD_SET_EXIT = "setexit";
String CMD_ACTIVE = "ACTIVE";
1
0

22 Dec '21
commit aa643f4aa42eb300da9dbb36862af0713281556a
Merge: 4a8c8f75 c90c51aa
Author: Nathan Freitas <nathan(a)guardianproject.info>
Date: Wed May 5 09:24:38 2021 -0400
Merge pull request #456 from eighthave/lint-fixes
Lint fixes
.gitlab-ci.yml | 2 +-
app-mini/src/main/res/values-ay/strings.xml | 2 +-
app-mini/src/main/res/values-be/strings.xml | 2 +-
app-mini/src/main/res/values-ca/strings.xml | 2 +-
app-mini/src/main/res/values-de/strings.xml | 2 +-
app-mini/src/main/res/values-el/strings.xml | 2 +-
app-mini/src/main/res/values-es-rAR/strings.xml | 2 +-
app-mini/src/main/res/values-es/strings.xml | 2 +-
app-mini/src/main/res/values-eu/strings.xml | 2 +-
app-mini/src/main/res/values-fa/strings.xml | 2 +-
app-mini/src/main/res/values-fr/strings.xml | 2 +-
app-mini/src/main/res/values-gl/strings.xml | 2 +-
app-mini/src/main/res/values-he/strings.xml | 184 --------------------
app-mini/src/main/res/values-hi/strings.xml | 2 +-
app-mini/src/main/res/values-hu/strings.xml | 2 +-
app-mini/src/main/res/values-id/strings.xml | 131 --------------
app-mini/src/main/res/values-in-rID/strings.xml | 126 --------------
.../{values-in-rID => values-in}/poestrings.xml | 0
app-mini/src/main/res/values-in/strings.xml | 125 ++++++++++++--
app-mini/src/main/res/values-is/strings.xml | 2 +-
app-mini/src/main/res/values-it/strings.xml | 2 +-
app-mini/src/main/res/values-ja/strings.xml | 2 +-
app-mini/src/main/res/values-mk/strings.xml | 2 +-
app-mini/src/main/res/values-nb/strings.xml | 4 +-
app-mini/src/main/res/values-nl/strings.xml | 2 +-
app-mini/src/main/res/values-pt-rBR/strings.xml | 2 +-
app-mini/src/main/res/values-ru/strings.xml | 2 +-
app-mini/src/main/res/values-sr/strings.xml | 2 +-
app-mini/src/main/res/values-sv/strings.xml | 2 +-
app-mini/src/main/res/values-th/strings.xml | 2 +-
app-mini/src/main/res/values-tr/strings.xml | 2 +-
app-mini/src/main/res/values-uk/strings.xml | 2 +-
app-mini/src/main/res/values-zh-rTW/strings.xml | 2 +-
app-mini/src/main/res/values/strings.xml | 2 +-
.../org/torproject/android/OrbotMainActivity.java | 4 +-
app/src/main/res/values-ay/strings.xml | 2 +-
app/src/main/res/values-be/strings.xml | 2 +-
app/src/main/res/values-ca/strings.xml | 2 +-
app/src/main/res/values-de/strings.xml | 2 +-
app/src/main/res/values-el/strings.xml | 2 +-
app/src/main/res/values-es-rAR/strings.xml | 2 +-
app/src/main/res/values-es/strings.xml | 2 +-
app/src/main/res/values-eu/strings.xml | 2 +-
app/src/main/res/values-fa/strings.xml | 2 +-
app/src/main/res/values-fi/strings.xml | 2 +-
app/src/main/res/values-fr-rFR/strings.xml | 2 +-
app/src/main/res/values-fr/strings.xml | 2 +-
app/src/main/res/values-gl/strings.xml | 2 +-
app/src/main/res/values-he/strings.xml | 190 ---------------------
app/src/main/res/values-hi/strings.xml | 2 +-
app/src/main/res/values-hu/strings.xml | 2 +-
app/src/main/res/values-id/strings.xml | 124 --------------
app/src/main/res/values-in-rID/strings.xml | 119 -------------
.../{values-in-rID => values-in}/poestrings.xml | 0
app/src/main/res/values-in/strings.xml | 120 +++++++++++--
app/src/main/res/values-is/strings.xml | 2 +-
app/src/main/res/values-it/strings.xml | 2 +-
app/src/main/res/values-ja/strings.xml | 2 +-
app/src/main/res/values-mk/strings.xml | 2 +-
app/src/main/res/values-nb/strings.xml | 4 +-
app/src/main/res/values-nl/strings.xml | 2 +-
app/src/main/res/values-pl/strings.xml | 2 +-
app/src/main/res/values-pt-rBR/strings.xml | 2 +-
app/src/main/res/values-pt-rPT/strings.xml | 2 +-
app/src/main/res/values-pt/strings.xml | 2 +-
app/src/main/res/values-ru/strings.xml | 2 +-
app/src/main/res/values-sr/strings.xml | 2 +-
app/src/main/res/values-sv/strings.xml | 2 +-
app/src/main/res/values-th/strings.xml | 2 +-
app/src/main/res/values-tr/strings.xml | 2 +-
app/src/main/res/values-uk/strings.xml | 2 +-
app/src/main/res/values-zh-rCN/strings.xml | 2 +-
app/src/main/res/values-zh-rTW/strings.xml | 2 +-
gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 59203 bytes
gradle/wrapper/gradle-wrapper.properties | 6 +-
gradlew | 2 +-
gradlew.bat | 21 +--
lint.xml | 8 +-
orbotservice/src/main/res/values-he/strings.xml | 23 ---
orbotservice/src/main/res/values-id/strings.xml | 26 ---
.../src/main/res/values-in-rID/strings.xml | 26 ---
orbotservice/src/main/res/values-in/strings.xml | 20 ++-
82 files changed, 311 insertions(+), 1072 deletions(-)
1
0