Merge "Freeze Networkstack AIDL API as V6"
diff --git a/common/moduleutils/src/android/net/ip/NetlinkMonitor.java b/common/moduleutils/src/android/net/ip/NetlinkMonitor.java
index 806f3ef..7c86beb 100644
--- a/common/moduleutils/src/android/net/ip/NetlinkMonitor.java
+++ b/common/moduleutils/src/android/net/ip/NetlinkMonitor.java
@@ -106,20 +106,24 @@
byteBuffer.order(ByteOrder.nativeOrder());
while (byteBuffer.remaining() > 0) {
- final int position = byteBuffer.position();
- final NetlinkMessage nlMsg = NetlinkMessage.parse(byteBuffer);
- if (nlMsg == null || nlMsg.getHeader() == null) {
- byteBuffer.position(position);
- mLog.e("unparsable netlink msg: " + hexify(byteBuffer));
- break;
- }
+ try {
+ final int position = byteBuffer.position();
+ final NetlinkMessage nlMsg = NetlinkMessage.parse(byteBuffer);
+ if (nlMsg == null || nlMsg.getHeader() == null) {
+ byteBuffer.position(position);
+ mLog.e("unparsable netlink msg: " + hexify(byteBuffer));
+ break;
+ }
- if (nlMsg instanceof NetlinkErrorMessage) {
- mLog.e("netlink error: " + nlMsg);
- continue;
- }
+ if (nlMsg instanceof NetlinkErrorMessage) {
+ mLog.e("netlink error: " + nlMsg);
+ continue;
+ }
- processNetlinkMessage(nlMsg, whenMs);
+ processNetlinkMessage(nlMsg, whenMs);
+ } catch (Exception e) {
+ mLog.e("Error handling netlink message", e);
+ }
}
}
diff --git a/common/moduleutils/src/android/net/util/FdEventsReader.java b/common/moduleutils/src/android/net/util/FdEventsReader.java
index ebd6c53..9045c01 100644
--- a/common/moduleutils/src/android/net/util/FdEventsReader.java
+++ b/common/moduleutils/src/android/net/util/FdEventsReader.java
@@ -24,6 +24,7 @@
import android.os.MessageQueue;
import android.system.ErrnoException;
import android.system.OsConstants;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -244,7 +245,7 @@
handlePacket(mBuffer, bytesRead);
} catch (Exception e) {
logError("handlePacket error: ", e);
- break;
+ Log.wtf(FdEventsReader.class.getSimpleName(), "Error handling packet", e);
}
}
diff --git a/common/moduleutils/src/android/net/util/InterfaceParams.java b/common/moduleutils/src/android/net/util/InterfaceParams.java
index 7e05a8d..0982981 100644
--- a/common/moduleutils/src/android/net/util/InterfaceParams.java
+++ b/common/moduleutils/src/android/net/util/InterfaceParams.java
@@ -16,8 +16,6 @@
package android.net.util;
-import static com.android.internal.util.Preconditions.checkArgument;
-
import android.net.MacAddress;
import android.text.TextUtils;
@@ -66,8 +64,12 @@
}
public InterfaceParams(String name, int index, MacAddress macAddr, int defaultMtu) {
- checkArgument((!TextUtils.isEmpty(name)), "impossible interface name");
- checkArgument((index > 0), "invalid interface index");
+ if (TextUtils.isEmpty(name)) {
+ throw new IllegalArgumentException("impossible interface name");
+ }
+
+ if (index <= 0) throw new IllegalArgumentException("invalid interface index");
+
this.name = name;
this.index = index;
this.hasMacAddress = (macAddr != null);
diff --git a/common/networkstackclient/Android.bp b/common/networkstackclient/Android.bp
index 9f096b4..675d007 100644
--- a/common/networkstackclient/Android.bp
+++ b/common/networkstackclient/Android.bp
@@ -24,6 +24,11 @@
"src/android/net/ipmemorystore/**/*.aidl",
],
backend: {
+ java: {
+ apex_available: [
+ "//apex_available:platform",
+ ],
+ },
ndk: {
enabled: false,
},
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 4336346..7edeae2 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Kennisgewings word gewys om aan te dui dat die netwerk \'n plekinligtingbladsy het"</string>
<string name="connected" msgid="4563643884927480998">"Gekoppel"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Is gekoppel / Tik om webwerf te bekyk"</string>
- <string name="application_label" msgid="8095087899576605955">"Konnektiwiteitbestuurder"</string>
+ <string name="application_label" msgid="1322847171305285454">"Netwerkbestuurder"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 3a13696..a5c349e 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"አውታረ መረቡ የመድረክ መረጃ ግገጽ እንዳለው ለማመልከት ማሳወቂያዎች ይታያሉ"</string>
<string name="connected" msgid="4563643884927480998">"ተገናኝቷል"</string>
<string name="tap_for_info" msgid="6849746325626883711">"ተገናኝቷል / የድር ጣቢያን ለማየት መታ ያድርጉ"</string>
- <string name="application_label" msgid="8095087899576605955">"የግንኙነት አስተዳዳሪ"</string>
+ <string name="application_label" msgid="1322847171305285454">"የአውታረ መረብ አስተዳዳሪ"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 35354d6..215b872 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"مصادقة مدخل مقيد الوصول"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"يتم عرض الإشعارات، عندما تتم مصادقة الجهاز بنجاح مع شبكة مدخل مقيد الوصول."</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"يتم عرض الإشعارات عندما تتم مصادقة الجهاز بنجاح مع شبكة مدخل مقيد الوصول."</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"معلومات عن المكان الذي يوفّر الشبكة"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"الإشعارات التي يتم عرضها لتشير إلى أن الشبكة تحتوي على صفحة معلومات عن المكان."</string>
<string name="connected" msgid="4563643884927480998">"الجهاز متصل الآن بالإنترنت."</string>
<string name="tap_for_info" msgid="6849746325626883711">"متصل بالشبكة، انقر للانتقال إلى الموقع الإلكتروني"</string>
- <string name="application_label" msgid="8095087899576605955">"مدير إمكانية الاتصال"</string>
+ <string name="application_label" msgid="1322847171305285454">"إدارة الشبكة"</string>
</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 5584829..2a51122 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"নেটৱৰ্কৰ এখন স্থলীৰ তথ্য পৃষ্ঠা থকাটো দৰ্শাবলৈ জাননীসমূহ দেখুওৱা হয়"</string>
<string name="connected" msgid="4563643884927480998">"সংযোগ কৰা হৈছে"</string>
<string name="tap_for_info" msgid="6849746325626883711">"সংযুক্ত / ৱেবছাইট চাবলৈ টিপক"</string>
- <string name="application_label" msgid="8095087899576605955">"সংযোগ পৰিচালক"</string>
+ <string name="application_label" msgid="1322847171305285454">"নেটৱৰ্ক মেনেজাৰ"</string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 0bf0bc3..0dfd623 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Şəbəkədə məkan məlumatı səhifəsi olduğunu göstərən bildirişlər"</string>
<string name="connected" msgid="4563643884927480998">"Qoşulub"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Qoşulub / Veb sayta baxmaq üçün toxunun"</string>
- <string name="application_label" msgid="8095087899576605955">"Bağlantı Meneceri"</string>
+ <string name="application_label" msgid="1322847171305285454">"Şəbəkə meneceri"</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 91f51aa..e53b2c9 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Obaveštenja koja se prikazuju da bi pokazala da mreža ima stranicu sa informacijama o mestu"</string>
<string name="connected" msgid="4563643884927480998">"Povezano"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Povezano/dodirnite da biste pregledali veb-sajt"</string>
- <string name="application_label" msgid="8095087899576605955">"Menadžer povezivanja"</string>
+ <string name="application_label" msgid="1322847171305285454">"Menadžer mreže"</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index ee76358..dc0d108 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Апавяшчэнні, якія паказваюцца, калі ў сетцы ёсць старонка з інфармацыяй пра яе месцазнаходжанне"</string>
<string name="connected" msgid="4563643884927480998">"Падключана"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Падключана / Націсніце для прагляду вэб-сайта"</string>
- <string name="application_label" msgid="8095087899576605955">"Менеджар падключэнняў"</string>
+ <string name="application_label" msgid="1322847171305285454">"Менеджар сетак"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index fde035d..28118b5 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Известия, показвани, за да укажат, че има страница с информация за мястото, където е реализирана мрежата"</string>
<string name="connected" msgid="4563643884927480998">"Установена е връзка"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Установена е връзка/докоснете за преглед на сайта"</string>
- <string name="application_label" msgid="8095087899576605955">"Мениджър на свързаността"</string>
+ <string name="application_label" msgid="1322847171305285454">"Мрежови мениджър"</string>
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 0294f52..917f2a9 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"নেটওয়ার্কে একটি ভেন্যুর তথ্য সংক্রান্ত পৃষ্ঠা রয়েছে তা বোঝানোর জন্য বিজ্ঞপ্তি দেখানো হয়েছে"</string>
<string name="connected" msgid="4563643884927480998">"কানেক্ট করা হয়েছে"</string>
<string name="tap_for_info" msgid="6849746325626883711">"কানেক্ট করা আছে / ওয়েবসাইট দেখতে ট্যাপ করুন"</string>
- <string name="application_label" msgid="8095087899576605955">"কানেক্টিভিটি ম্যানেজার"</string>
+ <string name="application_label" msgid="1322847171305285454">"নেটওয়ার্ক ম্যানেজার"</string>
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 7fba986..ed85f6a 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Obavještenja koja se prikazuju da pokažu da mreža ima stranicu s informacijama o mjestu događaja"</string>
<string name="connected" msgid="4563643884927480998">"Povezano"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Povezano/Dodirnite da vidite web lokaciju"</string>
- <string name="application_label" msgid="8095087899576605955">"Upravitelj povezivošću"</string>
+ <string name="application_label" msgid="1322847171305285454">"Upravitelj mreže"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 4f03248..4e8d3ec 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Les notificacions es mostren per indicar que la xarxa té una pàgina d\'informació del lloc"</string>
<string name="connected" msgid="4563643884927480998">"Connectat"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connectat / Toca per veure el lloc web"</string>
- <string name="application_label" msgid="8095087899576605955">"Gestor de connectivitat"</string>
+ <string name="application_label" msgid="1322847171305285454">"Administrador de xarxes"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 29e2104..a55fe72 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Oznámení zobrazovaná na znamení, že síť obsahuje stránku s informacemi o místě"</string>
<string name="connected" msgid="4563643884927480998">"Připojeno"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Připojeno / Klepnutím zobrazíte web"</string>
- <string name="application_label" msgid="8095087899576605955">"Správce připojení"</string>
+ <string name="application_label" msgid="1322847171305285454">"Správce sítí"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 2f386a6..e54f11c 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifikationer, der vises for at indikere, at netværket har en side med oplysninger om placeringen"</string>
<string name="connected" msgid="4563643884927480998">"Der er oprettet forbindelse"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Der er oprettet forbindelse/tryk for at se website"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity Manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Netværksadministrator"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 77cb34c..502a3b1 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Die Benachrichtigungen werden angezeigt, um auf ein Netzwerk mit einer Seite hinzuweisen, die weitere Informationen zum Netzwerkstandort enthält"</string>
<string name="connected" msgid="4563643884927480998">"Verbunden"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Verbunden/Zum Ansehen der Website tippen"</string>
- <string name="application_label" msgid="8095087899576605955">"Verbindungsmanager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Netzwerkmanager"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 2131a8a..32d423b 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Εμφανίζονται ειδοποιήσεις για να υποδείξουν ότι το δίκτυο διαθέτει σελίδα πληροφοριών για τον τόπο."</string>
<string name="connected" msgid="4563643884927480998">"Συνδέθηκε"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Συνδέθηκε/Πατήστε για προβολή του ιστοτόπου"</string>
- <string name="application_label" msgid="8095087899576605955">"Διαχείριση συνδεσιμότητας"</string>
+ <string name="application_label" msgid="1322847171305285454">"Διαχειριστής δικτύου"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 6f92e78..d9f3843 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifications shown to indicate that the network has a venue information page"</string>
<string name="connected" msgid="4563643884927480998">"Connected"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connected/Tap to view website"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Network manager"</string>
</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 6f92e78..d9f3843 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifications shown to indicate that the network has a venue information page"</string>
<string name="connected" msgid="4563643884927480998">"Connected"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connected/Tap to view website"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Network manager"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 6f92e78..d9f3843 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifications shown to indicate that the network has a venue information page"</string>
<string name="connected" msgid="4563643884927480998">"Connected"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connected/Tap to view website"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Network manager"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 6f92e78..d9f3843 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifications shown to indicate that the network has a venue information page"</string>
<string name="connected" msgid="4563643884927480998">"Connected"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connected/Tap to view website"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Network manager"</string>
</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 73e7e26..c6a7270 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifications shown to indicate the network has a venue information page"</string>
<string name="connected" msgid="4563643884927480998">"Connected"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connected / Tap to view website"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity Manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Network manager"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c42c686..915dfc5 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notificaciones que se muestran para indicar que la red tiene una página de información sobre el lugar"</string>
<string name="connected" msgid="4563643884927480998">"Se estableció conexión"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Conectado/presiona para ver el sitio web"</string>
- <string name="application_label" msgid="8095087899576605955">"Administrador de conectividad"</string>
+ <string name="application_label" msgid="1322847171305285454">"Administrador de redes"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3d9d0b5..b36dab5 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notificaciones que se muestran para indicar que la red tiene una página de información sobre el lugar"</string>
<string name="connected" msgid="4563643884927480998">"Conectada"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Conectado: toca para ver el sitio web"</string>
- <string name="application_label" msgid="8095087899576605955">"Administrador de conectividad"</string>
+ <string name="application_label" msgid="1322847171305285454">"Administrador de redes"</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 7bb30f4..2ffaff8 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Märguanded, mis kuvatakse juhul, kui võrgul on asukoha teabeleht"</string>
<string name="connected" msgid="4563643884927480998">"Ühendatud"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Ühendatud / puudutage veebisaidi vaatamiseks"</string>
- <string name="application_label" msgid="8095087899576605955">"Ühenduvuse haldur"</string>
+ <string name="application_label" msgid="1322847171305285454">"Võrguhaldur"</string>
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 58d1ff0..281a68b 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"Sare-zerbitzuen atariko autentifikazioa"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"Jakinarazpenak agertuko dira gailua sare-zerbitzuaren atari batean behar bezala autentifikatzen denean"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"Gailua sare-zerbitzuaren atari batean behar bezala autentifikatzen denean agertuko dira jakinarazpenak"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"Sareari dagokion tokiaren informazioa"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Jakinarazpenak agertuko dira sareari dagokion tokiak informazio-orri bat duela adierazteko"</string>
<string name="connected" msgid="4563643884927480998">"Konektatuta"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Konektatuta / Sakatu webgunea ikusteko"</string>
- <string name="application_label" msgid="8095087899576605955">"Konexio-kudeatzailea"</string>
+ <string name="application_label" msgid="1322847171305285454">"Sare-kudeatzailea"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index b66447f..b595a9e 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"اعلانهایی که نمایش داده میشوند تا نشان دهند شبکه صفحه اطلاعات محل دارد"</string>
<string name="connected" msgid="4563643884927480998">"متصل"</string>
<string name="tap_for_info" msgid="6849746325626883711">"متصل شد / برای مشاهده وبسایت ضربه بزنید"</string>
- <string name="application_label" msgid="8095087899576605955">"مدیر اتصال"</string>
+ <string name="application_label" msgid="1322847171305285454">"مدیر شبکه"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 4456ca3..975e7d2 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Ilmoitukset, jotka kertovat, että verkolla on paikkatietoja sisältävä sivu"</string>
<string name="connected" msgid="4563643884927480998">"Yhdistetty"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Yhdistetty / Näytä sivusto napauttamalla"</string>
- <string name="application_label" msgid="8095087899576605955">"Yhteyden hallinta"</string>
+ <string name="application_label" msgid="1322847171305285454">"Verkkojen hallinta"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index cf61980..5bd6d20 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifications indiquant que le réseau dispose d\'une page d\'information à propos du lieu"</string>
<string name="connected" msgid="4563643884927480998">"Connecté"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connecté : touchez pour afficher le site Web"</string>
- <string name="application_label" msgid="8095087899576605955">"Gestionnaire de connectivité"</string>
+ <string name="application_label" msgid="1322847171305285454">"Gestionnaire de réseaux"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 16d184f..20b737e 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifications affichées pour indiquer que le réseau comporte une page d\'informations sur le lieu auquel il est associé"</string>
<string name="connected" msgid="4563643884927480998">"Connecté"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Connecté/Appuyer pour afficher le site Web"</string>
- <string name="application_label" msgid="8095087899576605955">"Gestionnaire de connectivité"</string>
+ <string name="application_label" msgid="1322847171305285454">"Gestionnaire de réseaux"</string>
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 68be389..6c6db88 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Móstranse notificacións para indicar que a rede ten unha páxina de información sobre o lugar"</string>
<string name="connected" msgid="4563643884927480998">"Dispositivo conectado á rede"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Conectado. Toca para ver o sitio web"</string>
- <string name="application_label" msgid="8095087899576605955">"Xestor de conectividade"</string>
+ <string name="application_label" msgid="1322847171305285454">"Xestor de redes"</string>
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0123377..78ebb30 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"નેટવર્ક સ્થળની માહિતીનું પેજ ધરાવે છે તે સૂચવવા માટે બતાવવામાં આવતા નોટિફિકેશન"</string>
<string name="connected" msgid="4563643884927480998">"કનેક્ટ કર્યું છે"</string>
<string name="tap_for_info" msgid="6849746325626883711">"કનેક્ટેડ / વેબસાઇટ જોવા માટે ટૅપ કરો"</string>
- <string name="application_label" msgid="8095087899576605955">"કનેક્ટિવિટી મેનેજર"</string>
+ <string name="application_label" msgid="1322847171305285454">"નેટવર્ક મેનેજર"</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index e0e3c6e..730bb2a 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"किसी नेटवर्क पर उस जगह के बारे में बताने वाले पेज की जानकारी दिखाने वाली सूचनाएं"</string>
<string name="connected" msgid="4563643884927480998">"नेटवर्क से कनेक्ट हो गया है"</string>
<string name="tap_for_info" msgid="6849746325626883711">"कनेक्ट है / वेबसाइट देखने के लिए टैप करें"</string>
- <string name="application_label" msgid="8095087899576605955">"कनेक्टिविटी मैनेजर"</string>
+ <string name="application_label" msgid="1322847171305285454">"नेटवर्क मैनेजर"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index f861528..eaf0b2e 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Obavijesti koje se prikazuju kada mreža ima stranicu s podacima o mjestu događaja"</string>
<string name="connected" msgid="4563643884927480998">"Povezano"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Povezano/dodirnite da bi se prikazala web-lokacija"</string>
- <string name="application_label" msgid="8095087899576605955">"Upravitelj povezivosti"</string>
+ <string name="application_label" msgid="1322847171305285454">"Upravitelj mreža"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 2c44c05..801961c 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Értesítés jelenik meg, amely jelzi, hogy a hálózat a helyszínről szóló információs oldalt is tartalmaz"</string>
<string name="connected" msgid="4563643884927480998">"Csatlakozva"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Csatlakozva / Koppintson a webhely megtekintéséhez"</string>
- <string name="application_label" msgid="8095087899576605955">"Kapcsolatkezelő"</string>
+ <string name="application_label" msgid="1322847171305285454">"Hálózatkezelő"</string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 1bd793e..df1ba31 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Ծանուցումներ, որոնք ցույց են տալիս այն էջը, որում առկա են տեղեկություններ սարքի հասանելիության վայրի մասին"</string>
<string name="connected" msgid="4563643884927480998">"Միացված է"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Միացված է / Հպեք՝ կայքը դիտելու համար"</string>
- <string name="application_label" msgid="8095087899576605955">"Կապի ադմինիստրատոր"</string>
+ <string name="application_label" msgid="1322847171305285454">"Ցանցի կառավարիչ"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 5f9fed8..195391c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifikasi ditampilkan untuk menandakan bahwa jaringan memiliki halaman informasi tempat"</string>
<string name="connected" msgid="4563643884927480998">"Terhubung"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Terhubung / Ketuk untuk melihat situs"</string>
- <string name="application_label" msgid="8095087899576605955">"Pengelola Konektivitas"</string>
+ <string name="application_label" msgid="1322847171305285454">"Pengelola jaringan"</string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 571bc26..8dcaeb7 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Tilkynningar eru sýndar til að gefa til kynna að net innihaldi upplýsingasíðu um vettvang"</string>
<string name="connected" msgid="4563643884927480998">"Tengt"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Tengt / Ýttu til að skoða vefsvæði"</string>
- <string name="application_label" msgid="8095087899576605955">"Tengingastjórnun"</string>
+ <string name="application_label" msgid="1322847171305285454">"Netstjórnun"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 50a6024..7e0fc28 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"Autenticazione a captive portal"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"Notifiche mostrate in seguito all\'autenticazione del dispositivo a una rete captive portal"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"Notifiche mostrate in seguito all\'autenticazione del dispositivo su una rete captive portal"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"Info sull\'attività che offre la rete"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notifiche mostrate per indicare che la rete ha una pagina di informazioni su un luogo"</string>
<string name="connected" msgid="4563643884927480998">"Connesso"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Rete collegata/Tocca per visualizzare il sito web"</string>
- <string name="application_label" msgid="8095087899576605955">"Gestore connettività"</string>
+ <string name="application_label" msgid="1322847171305285454">"Network manager"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5a48792..4772691 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"התראות המוצגות כדי לציין שלרשת יש דף מידע על מקום"</string>
<string name="connected" msgid="4563643884927480998">"מחובר"</string>
<string name="tap_for_info" msgid="6849746325626883711">"מחוברת / יש להקיש כדי להציג את האתר"</string>
- <string name="application_label" msgid="8095087899576605955">"מנהל קישוריות"</string>
+ <string name="application_label" msgid="1322847171305285454">"ניהול רשתות"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 29f2737..e1f76e1 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"場所に関する情報のページがネットワークにあることを示す通知が表示されます"</string>
<string name="connected" msgid="4563643884927480998">"接続完了"</string>
<string name="tap_for_info" msgid="6849746325626883711">"接続しました。タップしてウェブサイトをご覧ください"</string>
- <string name="application_label" msgid="8095087899576605955">"接続マネージャー"</string>
+ <string name="application_label" msgid="1322847171305285454">"ネットワーク マネージャ"</string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index f6ea275..a1d79dd 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"შეტყობინებები გამოჩნდება იმის საჩვენებლად, რომ ქსელს აქვს ადგილის შესახებ ინფორმაციის გვერდი"</string>
<string name="connected" msgid="4563643884927480998">"დაკავშირებულია"</string>
<string name="tap_for_info" msgid="6849746325626883711">"დაკავშირებულია / შეეხეთ ვებსაიტის სანახავად"</string>
- <string name="application_label" msgid="8095087899576605955">"კავშირის მმართველი"</string>
+ <string name="application_label" msgid="1322847171305285454">"ქსელის მმართველი"</string>
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index fd94547..ce501d2 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Желінің орын туралы ақпарат беті барын көрсету үшін хабарландыру көрсетіледі."</string>
<string name="connected" msgid="4563643884927480998">"Байланыстырылды."</string>
<string name="tap_for_info" msgid="6849746325626883711">"Байланыстырылған/Веб-сайтты көру үшін түртіңіз."</string>
- <string name="application_label" msgid="8095087899576605955">"Байланыс менеджері"</string>
+ <string name="application_label" msgid="1322847171305285454">"Желі менеджері"</string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 9fc4e17..c043152 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"ការជូនដំណឹងបង្ហាញ ដើម្បីបង្ហាញថាបណ្ដាញមានទំព័រព័ត៌មានអំពីទីតាំង"</string>
<string name="connected" msgid="4563643884927480998">"បានភ្ជាប់"</string>
<string name="tap_for_info" msgid="6849746325626883711">"បានភ្ជាប់ / ចុចដើម្បីមើលគេហទំព័រ"</string>
- <string name="application_label" msgid="8095087899576605955">"កម្មវិធីគ្រប់គ្រងការតភ្ជាប់"</string>
+ <string name="application_label" msgid="1322847171305285454">"កម្មវិធីគ្រប់គ្រងបណ្ដាញ"</string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 671bd94..1e7f7f8 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"ವೈ-ಫೈ ಪ್ರಾರಂಭ ಪೋರ್ಟಲ್ನ ದೃಢೀಕರಣ"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"ಸಾಧನವು ವೈ-ಫೈ ಪ್ರಾರಂಭ ಪೋರ್ಟಲ್ಗೆ ಯಶಸ್ವಿಯಾಗಿ ಸಂಪರ್ಕ ಹೊಂದಿದಾಗ ಮತ್ತು ದೃಢೀಕರಿಸಿದಾಗ ತೋರಿಸಲಾಗುವ ಅಧಿಸೂಚನೆಗಳು"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"ಸಾಧನವು ವೈ-ಫೈ ಪ್ರಾರಂಭ ಪೋರ್ಟಲ್ಗೆ ಯಶಸ್ವಿಯಾಗಿ ಕನೆಕ್ಟ್ ಆದಾಗ ಮತ್ತು ದೃಢೀಕರಿಸಿದಾಗ ತೋರಿಸಲಾಗುವ ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"ನೆಟ್ವರ್ಕ್ ಸ್ಥಳದ ಮಾಹಿತಿ"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಸ್ಥಳದ ಮಾಹಿತಿ ನೀಡುವ ಪುಟವಿದೆ ಎಂಬುದನ್ನು ಸೂಚಿಸಲು ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ"</string>
<string name="connected" msgid="4563643884927480998">"ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="tap_for_info" msgid="6849746325626883711">"ಸಂಪರ್ಕಿಸಲಾಗಿದೆ / ವೆಬ್ಸೈಟ್ ವೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
- <string name="application_label" msgid="8095087899576605955">"ಸಂಪರ್ಕ ಕಲ್ಪಿಸುವಿಕೆ ನಿರ್ವಾಹಕ"</string>
+ <string name="application_label" msgid="1322847171305285454">"ನೆಟ್ವರ್ಕ್ ಮ್ಯಾನೇಜರ್"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 7120a34..03fb285 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"네트워크에 장소 정보 페이지가 있음을 나타내기 위해 표시되는 알림입니다."</string>
<string name="connected" msgid="4563643884927480998">"연결됨"</string>
<string name="tap_for_info" msgid="6849746325626883711">"연결됨 / 탭하여 웹사이트 보기"</string>
- <string name="application_label" msgid="8095087899576605955">"연결 관리자"</string>
+ <string name="application_label" msgid="1322847171305285454">"네트워크 관리자"</string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index e0d13e1..9aec881 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Тармак маалымат барагына киргенде билдирме көрсөтүлөт"</string>
<string name="connected" msgid="4563643884927480998">"Туташты"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Туташты / Вебсайтты көрүү үчүн таптаңыз"</string>
- <string name="application_label" msgid="8095087899576605955">"Байланышты башкаргыч"</string>
+ <string name="application_label" msgid="1322847171305285454">"Тармактарды башкаргыч"</string>
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 245fa72..58e4bc2 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"ສະແດງການແຈ້ງເຕືອນເພື່ອລະບຸວ່າເຄືອຂ່າຍມີໜ້າຂໍ້ມູນສະຖານທີ່"</string>
<string name="connected" msgid="4563643884927480998">"ເຊື່ອມຕໍ່ແລ້ວ"</string>
<string name="tap_for_info" msgid="6849746325626883711">"ເຊື່ອມຕໍ່ແລ້ວ / ແຕະເພື່ອເບິ່ງເວັບໄຊ"</string>
- <string name="application_label" msgid="8095087899576605955">"ຕົວຈັດການການເຊື່ອມຕໍ່"</string>
+ <string name="application_label" msgid="1322847171305285454">"ຕົວຈັດການເຄືອຂ່າຍ"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 569d3d0..18c8921 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Pranešimai rodomi informuojant, kad tinkle yra vietos informacijos puslapis"</string>
<string name="connected" msgid="4563643884927480998">"Prisijungta"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Prisijungta / žr. svetainę palietę"</string>
- <string name="application_label" msgid="8095087899576605955">"Ryšio tvarkytuvė"</string>
+ <string name="application_label" msgid="1322847171305285454">"Tinklo tvarkymo įrankis"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 3212776..8ecaada 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Paziņojumi par to, ka tīklam ir norises vietas informācijas lapa"</string>
<string name="connected" msgid="4563643884927480998">"Izveidots savienojums"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Izveidots savienojums / piesk., lai skatītu vietni"</string>
- <string name="application_label" msgid="8095087899576605955">"Savienojamības pārzinis"</string>
+ <string name="application_label" msgid="1322847171305285454">"Tīkla pārzinis"</string>
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index bbbe4cc..44dfed5 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Се прикажуваат известувања за да означат дека мрежата има страница со информации за местото на настанот"</string>
<string name="connected" msgid="4563643884927480998">"Поврзан"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Поврзано/допрете за да се прикаже веб-сајтот"</string>
- <string name="application_label" msgid="8095087899576605955">"Управник со поврзливост"</string>
+ <string name="application_label" msgid="1322847171305285454">"Управувач со мрежата"</string>
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index c853194..5eee05b 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"ക്യാപ്റ്റീവ് പോർട്ടൽ പരിശോധിക്കൽ"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"ക്യാപ്റ്റീവ് പോർട്ടൽ നെറ്റ്വർക്കിൽ ഉപകരണം കണക്റ്റ് ചെയ്താൽ അറിയിപ്പുകൾ കാണിക്കുന്നു"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"ക്യാപ്റ്റീവ് പോർട്ടൽ നെറ്റ്വർക്കിൽ ഉപകരണം പരിശോധിച്ചുറപ്പിച്ചാൽ അറിയിപ്പുകൾ കാണിക്കും"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"നെറ്റ്വർക്കിലെ സ്ഥല വിവരങ്ങൾ"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"നെറ്റ്വർക്കിന് സ്ഥല വിവരങ്ങൾക്കുള്ള പേജ് ഉണ്ടെന്ന് സൂചിപ്പിക്കാൻ അറിയിപ്പുകൾ കാണിക്കും"</string>
<string name="connected" msgid="4563643884927480998">"കണക്റ്റ് ചെയ്തു"</string>
<string name="tap_for_info" msgid="6849746325626883711">"കണക്റ്റ് ചെയ്തു / വെബ്സെെറ്റ് കാണാൻ ടാപ്പ് ചെയ്യൂ"</string>
- <string name="application_label" msgid="8095087899576605955">"കണക്റ്റിവിറ്റി മാനേജർ"</string>
+ <string name="application_label" msgid="1322847171305285454">"നെറ്റ്വർക്ക് മാനേജർ"</string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 1f59628..10e7870 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Сүлжээнд байршлын мэдээллийн хуудас байгааг заах зорилгоор харуулдаг мэдэгдэл"</string>
<string name="connected" msgid="4563643884927480998">"Холбогдсон"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Холбогдсон / Вэб сайтыг үзэхийн тулд товшино уу"</string>
- <string name="application_label" msgid="8095087899576605955">"Холболтын менежер"</string>
+ <string name="application_label" msgid="1322847171305285454">"Сүлжээний менежер"</string>
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 33c7e71..ab23825 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"नेटवर्कचे स्थळासंबंधित माहितीचे पेज असल्याचे दाखवण्याकरिता सूचना दाखवल्या जातात"</string>
<string name="connected" msgid="4563643884927480998">"कनेक्ट केले आहे"</string>
<string name="tap_for_info" msgid="6849746325626883711">"कनेक्ट केले / वेबसाइट पाहण्यासाठी टॅप करा"</string>
- <string name="application_label" msgid="8095087899576605955">"कनेक्टिव्हिटी व्यवस्थापक"</string>
+ <string name="application_label" msgid="1322847171305285454">"नेटवर्क व्यवस्थापक"</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 531ef11..e3b7121 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Pemberitahuan dipaparkan untuk menunjukkan rangkaian mempunyai halaman maklumat tempat"</string>
<string name="connected" msgid="4563643884927480998">"Disambungkan"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Disambungkan / Ketik untuk melihat tapak web"</string>
- <string name="application_label" msgid="8095087899576605955">"Pengurus Kesambungan"</string>
+ <string name="application_label" msgid="1322847171305285454">"Pengurus rangkaian"</string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 0277679..1cd147c 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"ကွန်ရက်တွင် နေရာအချက်အလက် စာမျက်နှာ ရှိကြောင်း ညွှန်ပြရန် အကြောင်းကြားချက်များ ပြသည်"</string>
<string name="connected" msgid="4563643884927480998">"ချိတ်ဆက်ထားသည်"</string>
<string name="tap_for_info" msgid="6849746325626883711">"ချိတ်ဆက်ထားသည် / ဝဘ်ဆိုက်ကိုကြည့်ရန် တို့ပါ"</string>
- <string name="application_label" msgid="8095087899576605955">"ချိတ်ဆက်မှု မန်နေဂျာ"</string>
+ <string name="application_label" msgid="1322847171305285454">"ကွန်ရက်မန်နေဂျာ"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 9ea4ba1..9f2a576 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"Autentisering med obligatorisk side"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"Varsler vises når enheten har autentisert med en obligatorisk side for et nettverk"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"Varsler som vises når enheten er blitt autentisert på en obligatorisk side for et nettverk"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"Nettverkets stedsInformasjon"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Varsler vises for å indikere at nettverket har en side med stedsinformasjon"</string>
<string name="connected" msgid="4563643884927480998">"Tilkoblet"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Tilkoblet / trykk for å se nettstedet"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity Manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Nettverksadministrator"</string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 8ea01e9..500d584 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"नेटवर्कको स्थानसम्बन्धी जानकारी भएको पृष्ठ रहेको सङ्केत गर्न देखाइने सूचनाहरू"</string>
<string name="connected" msgid="4563643884927480998">"जोडिएको छ"</string>
<string name="tap_for_info" msgid="6849746325626883711">"जोडियो / वेबसाइट हेर्न ट्याप गर्नुहोस्"</string>
- <string name="application_label" msgid="8095087899576605955">"जडान प्रबन्धक"</string>
+ <string name="application_label" msgid="1322847171305285454">"नेटवर्क व्यवस्थापक"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f34fe3f..527d895 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Er worden meldingen weergegeven om aan te geven dat het netwerk een locatie-informatiepagina heeft"</string>
<string name="connected" msgid="4563643884927480998">"Verbonden"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Verbonden / Tik om de website te bekijken"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity Manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Netwerkbeheer"</string>
</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 54169f0..a067683 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"ନେଟୱାର୍କରେ ଏକ ଭେନ୍ୟୁ ସୂଚନା ପୃଷ୍ଠା ଅଛି ବୋଲି ସୂଚିତ କରିବାକୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଦେଖାଯାଏ"</string>
<string name="connected" msgid="4563643884927480998">"ସଂଯୋଗ କରାଯାଇଛି"</string>
<string name="tap_for_info" msgid="6849746325626883711">"ସଂଯୁକ୍ତ ଅଛି / ୱେବସାଇଟ୍ ଦେଖିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
- <string name="application_label" msgid="8095087899576605955">"କନେକ୍ଟିଭିଟି ମ୍ୟାନେଜର୍"</string>
+ <string name="application_label" msgid="1322847171305285454">"ନେଟୱାର୍କ ପରିଚାଳକ"</string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 96908e0..6b9e743 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"ਇਹ ਦੱਸਣ ਲਈ ਸੂਚਨਾਵਾਂ ਦਿਖਾਈਆਂ ਜਾਂਦੀਆਂ ਹਨ ਕਿ ਨੈੱਟਵਰਕ ਕੋਲ ਸਥਾਨ ਬਾਰੇ ਜਾਣਕਾਰੀ ਵਾਲਾ ਪੰਨਾ ਹੈ"</string>
<string name="connected" msgid="4563643884927480998">"ਕਨੈਕਟ ਹੈ"</string>
<string name="tap_for_info" msgid="6849746325626883711">"ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ / ਵੈੱਬਸਾਈਟ ਨੂੰ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
- <string name="application_label" msgid="8095087899576605955">"ਕਨੈਕਟੀਵਿਟੀ ਪ੍ਰਬੰਧਕ"</string>
+ <string name="application_label" msgid="1322847171305285454">"ਨੈੱਟਵਰਕ ਪ੍ਰਬੰਧਕ"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index e21dc65..7db7b79 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Powiadomienia są wyświetlane, aby poinformować, że sieć posiada stronę z informacjami o miejscach wydarzeń"</string>
<string name="connected" msgid="4563643884927480998">"Połączono"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Połączono / Kliknij, aby wyświetlić stronę"</string>
- <string name="application_label" msgid="8095087899576605955">"Menedżer połączeń"</string>
+ <string name="application_label" msgid="1322847171305285454">"Menedżer sieci"</string>
</resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 568e479..e1f090b 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notificações mostradas para indicar que a rede tem uma página de informações sobre o local"</string>
<string name="connected" msgid="4563643884927480998">"Conectado"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Conectado / Toque para ver o site"</string>
- <string name="application_label" msgid="8095087899576605955">"Gerenciador de conectividade"</string>
+ <string name="application_label" msgid="1322847171305285454">"Gerenciador de rede"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index cf6cf26..5049b5f 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"As notificações são apresentadas para indicar que a rede tem uma página de informações sobre o local."</string>
<string name="connected" msgid="4563643884927480998">"Ligado"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Ligado/Toque para ver o Website"</string>
- <string name="application_label" msgid="8095087899576605955">"Gestor de conetividade"</string>
+ <string name="application_label" msgid="1322847171305285454">"Gestor de redes"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 568e479..e1f090b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notificações mostradas para indicar que a rede tem uma página de informações sobre o local"</string>
<string name="connected" msgid="4563643884927480998">"Conectado"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Conectado / Toque para ver o site"</string>
- <string name="application_label" msgid="8095087899576605955">"Gerenciador de conectividade"</string>
+ <string name="application_label" msgid="1322847171305285454">"Gerenciador de rede"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 11528e9..feda547 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Notificări afișate pentru a indica faptul că o rețea are o pagină cu informații despre locație"</string>
<string name="connected" msgid="4563643884927480998">"Conectată"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Conectat / atingeți pentru a vedea site-ul"</string>
- <string name="application_label" msgid="8095087899576605955">"Manager de conectivitate"</string>
+ <string name="application_label" msgid="1322847171305285454">"Manager de rețea"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 2d82e38..399d025 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Уведомления о наличии страницы с информацией о месте, где доступна сеть."</string>
<string name="connected" msgid="4563643884927480998">"Подключение выполнено"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Подключено. Нажмите, чтобы открыть сайт."</string>
- <string name="application_label" msgid="8095087899576605955">"Диспетчер обмена данными"</string>
+ <string name="application_label" msgid="1322847171305285454">"Менеджер сетей"</string>
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 65e75bb..cc91f09 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"ජාලයට ස්ථාන තොරතුරු පිටුවක් ඇති බව දැක්වීමට දැනුම් දීම් පෙන්වයි"</string>
<string name="connected" msgid="4563643884927480998">"සම්බන්ධ විය"</string>
<string name="tap_for_info" msgid="6849746325626883711">"සම්බන්ධිතයි / වෙබ් අඩවිය බැලීමට තට්ටු කරන්න"</string>
- <string name="application_label" msgid="8095087899576605955">"සබැඳුම් හැකියා කළමනාකරු"</string>
+ <string name="application_label" msgid="1322847171305285454">"ජාල කළමනාකරු"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 359649a..819fc57 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Zobrazované upozornenia oznamujú, že sieť má stránku s informáciami o mieste konania"</string>
<string name="connected" msgid="4563643884927480998">"Pripojená"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Pripojené / klepnutím zobrazíte web"</string>
- <string name="application_label" msgid="8095087899576605955">"Správca pripojenia"</string>
+ <string name="application_label" msgid="1322847171305285454">"Správca siete"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index dc856a4..98b1d9f 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Obvestila, ki so prikazana, ko ima omrežje stran z informacijami o prizorišču"</string>
<string name="connected" msgid="4563643884927480998">"Povezava je vzpostavljena"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Povezano / Dotaknite se za ogled spletnega mesta"</string>
- <string name="application_label" msgid="8095087899576605955">"Upravitelj povezljivosti"</string>
+ <string name="application_label" msgid="1322847171305285454">"Upravitelj omrežij"</string>
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 9e3cbac..a590ee6 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Njoftimet e shfaqura për të treguar se rrjeti ka një faqe me informacione për vendin"</string>
<string name="connected" msgid="4563643884927480998">"U lidh"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Lidhur / Trokit për të parë faqen e internetit"</string>
- <string name="application_label" msgid="8095087899576605955">"Menaxheri i lidhshmërisë"</string>
+ <string name="application_label" msgid="1322847171305285454">"Menaxheri i rrjetit"</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 4332dcd..e791575 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Обавештења која се приказују да би показала да мрежа има страницу са информацијама о месту"</string>
<string name="connected" msgid="4563643884927480998">"Повезано"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Повезано/додирните да бисте прегледали веб-сајт"</string>
- <string name="application_label" msgid="8095087899576605955">"Менаџер повезивања"</string>
+ <string name="application_label" msgid="1322847171305285454">"Менаџер мреже"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index b414de1..dcdc771 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Aviseringar visas när det finns en informationssida för nätverkets plats"</string>
<string name="connected" msgid="4563643884927480998">"Ansluten"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Ansluten – tryck för att visa webbplatsen"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity Manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Nätverksadministratör"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 257d89b..480d89c 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"Uthibitishaji wa ukurasa wa mwanzo"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"Arifa zinaonyeshwa wakati kifaa kimethibitishwa kwenye mtandao wa ukurasa wa mwanzo"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"Arifa zinaonyeshwa wakati kifaa kimethibitishwa kwenye mtandao wenye ukurasa wa mwanzo"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"Maelezo ya mtandao wa mahali"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Arifa zinaonyeshwa ili kuashiria kuwa mtandao una ukurasa wa maelezo ya mahali"</string>
<string name="connected" msgid="4563643884927480998">"Umeunganisha"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Imeunganishwa / Gusa ili uangalie tovuti"</string>
- <string name="application_label" msgid="8095087899576605955">"Kidhibiti cha Muunganisho"</string>
+ <string name="application_label" msgid="1322847171305285454">"Kidhibiti cha mtandao"</string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index b9d47dc..22b3547 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -17,12 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"கேப்டிவ் போர்டல் அங்கீகரிப்பு"</string>
- <!-- no translation found for notification_channel_description_connected (7239184168268014518) -->
- <skip />
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"கேப்டிவ் போர்டல் நெட்வொர்க்கில் சாதனம் வெற்றிகரமாக அங்கீகரிக்கப்பட்டதும் அறிவிப்புகள் காட்டப்படும்"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"நெட்வொர்க் முகவரித் தகவல்"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"நெட்வொர்க்கிற்கு முகவரித் தகவல் பக்கம் இருப்பதைக் குறிப்பிட அறிவிப்புகள் காட்டப்படும்"</string>
<string name="connected" msgid="4563643884927480998">"இணைக்கப்பட்டது"</string>
<string name="tap_for_info" msgid="6849746325626883711">"இணைக்கப்பட்டுள்ளது/இணையதளத்தைப் பார்க்க, தட்டவும்"</string>
- <!-- no translation found for application_label (8095087899576605955) -->
- <skip />
+ <string name="application_label" msgid="1322847171305285454">"நெட்வொர்க் நிர்வாகி"</string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 4c386f7..8e85ac7 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -17,11 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"క్యాప్టివ్ పోర్టల్ ప్రామాణీకరణ"</string>
- <!-- no translation found for notification_channel_description_connected (7239184168268014518) -->
- <skip />
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"క్యాప్టివ్ పోర్టల్ నెట్వర్క్కి పరికరం విజయవంతంగా ప్రామాణీకరించబడినప్పుడు చూపించబడే నోటిఫికేషన్లు"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"నెట్వర్క్ వేదిక సమాచారం"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"నెట్వర్క్లో వేదిక సమాచార పేజీ ఉందని సూచించడానికి నోటిఫికేషన్లు చూపబడతాయి"</string>
<string name="connected" msgid="4563643884927480998">"కనెక్ట్ చేయబడింది"</string>
<string name="tap_for_info" msgid="6849746325626883711">"కనెక్టెడ్ / వెబ్సైట్ను చూడటానికి ట్యాప్ చేయండి."</string>
- <string name="application_label" msgid="8095087899576605955">"కనెక్టివిటీ మేనేజర్"</string>
+ <string name="application_label" msgid="1322847171305285454">"నెట్వర్క్ మేనేజర్"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 05ec163..3b053aa 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"การแจ้งเตือนที่แสดงเพื่อบ่งชี้ว่าเครือข่ายมีหน้าข้อมูลสถานที่"</string>
<string name="connected" msgid="4563643884927480998">"เชื่อมต่อแล้ว"</string>
<string name="tap_for_info" msgid="6849746325626883711">"เชื่อมต่อแล้ว/แตะเพื่อดูเว็บไซต์"</string>
- <string name="application_label" msgid="8095087899576605955">"ตัวจัดการการเชื่อมต่อ"</string>
+ <string name="application_label" msgid="1322847171305285454">"ตัวจัดการเครือข่าย"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 1bfd98d..912ec8a 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Nagpapakita ng mga notification para isaad na may page ng impormasyon ng venue ang network"</string>
<string name="connected" msgid="4563643884927480998">"Nakakonekta"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Nakakonekta / I-tap para makita ang website"</string>
- <string name="application_label" msgid="8095087899576605955">"Connectivity Manager"</string>
+ <string name="application_label" msgid="1322847171305285454">"Network manager"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1ee5835..f89016a 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Ağın bir mekan bilgisi sayfası olduğunu gösteren bildirimler"</string>
<string name="connected" msgid="4563643884927480998">"Bağlandı"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Bağlı / Web sitesini görüntülemek için dokunun"</string>
- <string name="application_label" msgid="8095087899576605955">"Bağlantı Yöneticisi"</string>
+ <string name="application_label" msgid="1322847171305285454">"Ağ yöneticisi"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index f20440b..5ea1b1f 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"Автентифікація на адаптивному порталі"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"Сповіщення з\'являються, коли пристрій авторизується в мережі адаптивного порталу"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"Сповіщення, які з\'являються, коли пристрій авторизується в мережі з адаптивним порталом"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"Інформація про місце в мережі"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Сповіщення з\'являються, якщо в мережі є сторінка з інформацією про місце"</string>
<string name="connected" msgid="4563643884927480998">"Підключено"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Підключено. Торкніться, щоб переглянути веб-сайт"</string>
- <string name="application_label" msgid="8095087899576605955">"Диспетчер з\'єднання"</string>
+ <string name="application_label" msgid="1322847171305285454">"Менеджер мереж"</string>
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index a0eae1d..ae54a54 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"نیٹ ورک میں مقام سے متعلق معلومات کا صفحہ موجود ہے کی نشاندہی کے لیے اطلاعات کو دکھایا جاتا ہے"</string>
<string name="connected" msgid="4563643884927480998">"منسلک ہے"</string>
<string name="tap_for_info" msgid="6849746325626883711">"منسلک ہے / ویب سائٹ ملاحظہ کرنے کیلئے تھپتھپائیں"</string>
- <string name="application_label" msgid="8095087899576605955">"کنیکٹوٹی مینیجر"</string>
+ <string name="application_label" msgid="1322847171305285454">"نیٹ ورک مینیجر"</string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index f209c63..068b2d9 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Tarmoq bor joy haqida axborot sahifasi borligini bildiruvchi bildirishnomalar"</string>
<string name="connected" msgid="4563643884927480998">"Ulandi"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Ulangan / Saytni ochish uchun bosing"</string>
- <string name="application_label" msgid="8095087899576605955">"Aloqa menejeri"</string>
+ <string name="application_label" msgid="1322847171305285454">"Tarmoqlar menejeri"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 6ea1e6c..40584e2 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_name_connected" msgid="1795068343200033922">"Xác thực qua trang xác thực"</string>
- <string name="notification_channel_description_connected" msgid="7239184168268014518">"Thông báo hiển thị khi thiết bị đã xác thực thành công và kết nối với mạng trang xác thực"</string>
+ <string name="notification_channel_description_connected" msgid="7239184168268014518">"Thông báo hiển thị khi thiết bị đã xác thực thành công và kết nối với mạng của trang xác thực"</string>
<string name="notification_channel_name_network_venue_info" msgid="6526543187249265733">"Thông tin về địa điểm trong mạng"</string>
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Thông báo hiển thị để cho biết mạng này có trang thông tin về địa điểm"</string>
<string name="connected" msgid="4563643884927480998">"Đã kết nối"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Đã kết nối/Nhấn để xem trang web"</string>
- <string name="application_label" msgid="8095087899576605955">"Trình quản lý kết nối"</string>
+ <string name="application_label" msgid="1322847171305285454">"Trình quản lý mạng"</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index c6d5737..1157f38 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"为说明网络包含场地信息页面而显示的通知"</string>
<string name="connected" msgid="4563643884927480998">"已连接"</string>
<string name="tap_for_info" msgid="6849746325626883711">"已连接/点按即可查看网站"</string>
- <string name="application_label" msgid="8095087899576605955">"连接管理器"</string>
+ <string name="application_label" msgid="1322847171305285454">"网络管理器"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 98c44d5..b08ea64 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"為說明網絡具有場地資料頁面而顯示的通知"</string>
<string name="connected" msgid="4563643884927480998">"已連線"</string>
<string name="tap_for_info" msgid="6849746325626883711">"已連接/輕按即可查看網站"</string>
- <string name="application_label" msgid="8095087899576605955">"連線管理工具"</string>
+ <string name="application_label" msgid="1322847171305285454">"網絡管理員"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c0a51e0..882f4bf 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"當網路有驗證資訊頁面時,系統就會顯示這類通知"</string>
<string name="connected" msgid="4563643884927480998">"已連線"</string>
<string name="tap_for_info" msgid="6849746325626883711">"已連線/輕觸即可查看網站"</string>
- <string name="application_label" msgid="8095087899576605955">"連線管理員"</string>
+ <string name="application_label" msgid="1322847171305285454">"網路管理工具"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 19e71a2..0e24519 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -22,5 +22,5 @@
<string name="notification_channel_description_network_venue_info" msgid="5131499595382733605">"Izaziso eziboniswa ukubonisa ukuthi inethiwekhi inekhasi lolwazi lwendawo"</string>
<string name="connected" msgid="4563643884927480998">"Ixhunyiwe"</string>
<string name="tap_for_info" msgid="6849746325626883711">"Ixhunyiwe / Thepha ukuze ubuke iwebhusayithi"</string>
- <string name="application_label" msgid="8095087899576605955">"Umphathi Wokuxhumana"</string>
+ <string name="application_label" msgid="1322847171305285454">"Umphathi wenethiwekhi"</string>
</resources>
diff --git a/src/android/net/dhcp/DhcpPacketListener.java b/src/android/net/dhcp/DhcpPacketListener.java
index c9235da..656b642 100644
--- a/src/android/net/dhcp/DhcpPacketListener.java
+++ b/src/android/net/dhcp/DhcpPacketListener.java
@@ -19,6 +19,7 @@
import android.net.util.FdEventsReader;
import android.os.Handler;
import android.system.Os;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -59,6 +60,8 @@
onReceive(packet, recvbuf.mSrcAddr, recvbuf.mSrcPort);
} catch (DhcpPacket.ParseException e) {
logParseError(recvbuf.mBytes, length, e);
+ } catch (Throwable e) {
+ Log.wtf(DhcpPacketListener.class.getSimpleName(), "Error handling DHCP packet", e);
}
}
diff --git a/src/android/net/dhcp/DhcpServer.java b/src/android/net/dhcp/DhcpServer.java
index 1bc7c65..212e609 100644
--- a/src/android/net/dhcp/DhcpServer.java
+++ b/src/android/net/dhcp/DhcpServer.java
@@ -20,6 +20,9 @@
import static android.net.dhcp.DhcpPacket.DHCP_HOST_NAME;
import static android.net.dhcp.DhcpPacket.DHCP_SERVER;
import static android.net.dhcp.DhcpPacket.ENCAP_BOOTP;
+import static android.net.dhcp.IDhcpServer.STATUS_INVALID_ARGUMENT;
+import static android.net.dhcp.IDhcpServer.STATUS_SUCCESS;
+import static android.net.dhcp.IDhcpServer.STATUS_UNKNOWN_ERROR;
import static android.net.shared.Inet4AddressUtils.getBroadcastAddress;
import static android.net.shared.Inet4AddressUtils.getPrefixMaskAsInet4Address;
import static android.net.util.NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION;
@@ -48,8 +51,6 @@
import android.net.util.SharedLog;
import android.net.util.SocketUtils;
import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -63,6 +64,8 @@
import androidx.annotation.VisibleForTesting;
import com.android.internal.util.HexDump;
+import com.android.internal.util.State;
+import com.android.internal.util.StateMachine;
import java.io.FileDescriptor;
import java.io.IOException;
@@ -78,12 +81,12 @@
* authoritative for all leases on the subnet, which means that DHCP requests for unknown leases of
* unknown hosts receive a reply instead of being ignored.
*
- * <p>The server is single-threaded (including send/receive operations): all internal operations are
- * done on the provided {@link Looper}. Public methods are thread-safe and will schedule operations
- * on the looper asynchronously.
+ * <p>The server relies on StateMachine's handler (including send/receive operations): all internal
+ * operations are done in StateMachine's looper. Public methods are thread-safe and will schedule
+ * operations on that looper asynchronously.
* @hide
*/
-public class DhcpServer extends IDhcpServer.Stub {
+public class DhcpServer extends StateMachine {
private static final String REPO_TAG = "Repository";
// Lease time to transmit to client instead of a negative time in case a lease expired before
@@ -93,12 +96,11 @@
private static final int CMD_START_DHCP_SERVER = 1;
private static final int CMD_STOP_DHCP_SERVER = 2;
private static final int CMD_UPDATE_PARAMS = 3;
+ private static final int CMD_SUSPEND_DHCP_SERVER = 4;
@NonNull
private final Context mContext;
@NonNull
- private final HandlerThread mHandlerThread;
- @NonNull
private final String mIfName;
@NonNull
private final DhcpLeaseRepository mLeaseRepo;
@@ -108,19 +110,22 @@
private final Dependencies mDeps;
@NonNull
private final Clock mClock;
+ @NonNull
+ private DhcpServingParams mServingParams;
@Nullable
- private volatile ServerHandler mHandler;
-
- private final boolean mDhcpRapidCommitEnabled;
-
- // Accessed only on the handler thread
- @Nullable
private DhcpPacketListener mPacketListener;
@Nullable
private FileDescriptor mSocket;
- @NonNull
- private DhcpServingParams mServingParams;
+ @Nullable
+ private IDhcpEventCallbacks mEventCallbacks;
+
+ private final boolean mDhcpRapidCommitEnabled;
+
+ // States.
+ private final StoppedState mStoppedState = new StoppedState();
+ private final StartedState mStartedState = new StartedState();
+ private final RunningState mRunningState = new RunningState();
/**
* Clock to be used by DhcpServer to track time for lease expiration.
@@ -164,7 +169,7 @@
/**
* Create a packet listener that will send packets to be processed.
*/
- DhcpPacketListener makePacketListener();
+ DhcpPacketListener makePacketListener(@NonNull Handler handler);
/**
* Create a clock that the server will use to track time.
@@ -179,12 +184,6 @@
@NonNull String ifname, @NonNull FileDescriptor fd) throws IOException;
/**
- * Verify that the caller is allowed to call public methods on DhcpServer.
- * @throws SecurityException The caller is not allowed to call public methods on DhcpServer.
- */
- void checkCaller() throws SecurityException;
-
- /**
* Check whether or not one specific experimental feature for connectivity namespace is
* enabled.
* @param context The global context information about an app environment.
@@ -210,8 +209,8 @@
}
@Override
- public DhcpPacketListener makePacketListener() {
- return new PacketListener();
+ public DhcpPacketListener makePacketListener(@NonNull Handler handler) {
+ return new PacketListener(handler);
}
@Override
@@ -226,11 +225,6 @@
}
@Override
- public void checkCaller() {
- enforceNetworkStackCallingPermission();
- }
-
- @Override
public boolean isFeatureEnabled(@NonNull Context context, @NonNull String name) {
return NetworkStackUtils.isFeatureEnabled(context, NAMESPACE_CONNECTIVITY, name);
}
@@ -244,19 +238,18 @@
public DhcpServer(@NonNull Context context, @NonNull String ifName,
@NonNull DhcpServingParams params, @NonNull SharedLog log) {
- this(context, new HandlerThread(DhcpServer.class.getSimpleName() + "." + ifName),
- ifName, params, log, null);
+ this(context, ifName, params, log, null);
}
@VisibleForTesting
- DhcpServer(@NonNull Context context, @NonNull HandlerThread handlerThread,
- @NonNull String ifName, @NonNull DhcpServingParams params, @NonNull SharedLog log,
- @Nullable Dependencies deps) {
+ DhcpServer(@NonNull Context context, @NonNull String ifName, @NonNull DhcpServingParams params,
+ @NonNull SharedLog log, @Nullable Dependencies deps) {
+ super(DhcpServer.class.getSimpleName() + "." + ifName);
+
if (deps == null) {
deps = new DependenciesImpl();
}
mContext = context;
- mHandlerThread = handlerThread;
mIfName = ifName;
mServingParams = params;
mLog = log;
@@ -264,6 +257,61 @@
mClock = deps.makeClock();
mLeaseRepo = deps.makeLeaseRepository(mServingParams, mLog, mClock);
mDhcpRapidCommitEnabled = deps.isFeatureEnabled(context, DHCP_RAPID_COMMIT_VERSION);
+
+ // CHECKSTYLE:OFF IndentationCheck
+ addState(mStoppedState);
+ addState(mStartedState);
+ addState(mRunningState, mStartedState);
+ // CHECKSTYLE:ON IndentationCheck
+
+ setInitialState(mStoppedState);
+
+ super.start();
+ }
+
+ /**
+ * Make a IDhcpServer connector to communicate with this DhcpServer.
+ */
+ public IDhcpServer makeConnector() {
+ return new DhcpServerConnector();
+ }
+
+ private class DhcpServerConnector extends IDhcpServer.Stub {
+ @Override
+ public void start(@Nullable INetworkStackStatusCallback cb) {
+ enforceNetworkStackCallingPermission();
+ DhcpServer.this.start(cb);
+ }
+
+ @Override
+ public void startWithCallbacks(@Nullable INetworkStackStatusCallback statusCb,
+ @Nullable IDhcpEventCallbacks eventCb) {
+ enforceNetworkStackCallingPermission();
+ DhcpServer.this.start(statusCb, eventCb);
+ }
+
+ @Override
+ public void updateParams(@Nullable DhcpServingParamsParcel params,
+ @Nullable INetworkStackStatusCallback cb) {
+ enforceNetworkStackCallingPermission();
+ DhcpServer.this.updateParams(params, cb);
+ }
+
+ @Override
+ public void stop(@Nullable INetworkStackStatusCallback cb) {
+ enforceNetworkStackCallingPermission();
+ DhcpServer.this.stop(cb);
+ }
+
+ @Override
+ public int getInterfaceVersion() {
+ return this.VERSION;
+ }
+
+ @Override
+ public String getInterfaceHash() {
+ return this.HASH;
+ }
}
/**
@@ -272,9 +320,8 @@
* <p>It is not legal to call this method more than once; in particular the server cannot be
* restarted after being stopped.
*/
- @Override
- public void start(@Nullable INetworkStackStatusCallback cb) {
- startWithCallbacks(cb, null);
+ void start(@Nullable INetworkStackStatusCallback cb) {
+ start(cb, null);
}
/**
@@ -283,12 +330,8 @@
* <p>It is not legal to call this method more than once; in particular the server cannot be
* restarted after being stopped.
*/
- @Override
- public void startWithCallbacks(@Nullable INetworkStackStatusCallback statusCb,
+ void start(@Nullable INetworkStackStatusCallback statusCb,
@Nullable IDhcpEventCallbacks eventCb) {
- mDeps.checkCaller();
- mHandlerThread.start();
- mHandler = new ServerHandler(mHandlerThread.getLooper());
sendMessage(CMD_START_DHCP_SERVER, new Pair<>(statusCb, eventCb));
}
@@ -296,19 +339,15 @@
* Update serving parameters. All subsequently received requests will be handled with the new
* parameters, and current leases that are incompatible with the new parameters are dropped.
*/
- @Override
- public void updateParams(@Nullable DhcpServingParamsParcel params,
- @Nullable INetworkStackStatusCallback cb) throws RemoteException {
- mDeps.checkCaller();
+ void updateParams(@Nullable DhcpServingParamsParcel params,
+ @Nullable INetworkStackStatusCallback cb) {
final DhcpServingParams parsedParams;
try {
// throws InvalidParameterException with null params
parsedParams = DhcpServingParams.fromParcelableObject(params);
} catch (DhcpServingParams.InvalidParameterException e) {
mLog.e("Invalid parameters sent to DhcpServer", e);
- if (cb != null) {
- cb.onStatusAvailable(STATUS_INVALID_ARGUMENT);
- }
+ maybeNotifyStatus(cb, STATUS_INVALID_ARGUMENT);
return;
}
sendMessage(CMD_UPDATE_PARAMS, new Pair<>(parsedParams, cb));
@@ -320,28 +359,74 @@
* <p>As the server is stopped asynchronously, some packets may still be processed shortly after
* calling this method.
*/
- @Override
- public void stop(@Nullable INetworkStackStatusCallback cb) {
- mDeps.checkCaller();
+ void stop(@Nullable INetworkStackStatusCallback cb) {
sendMessage(CMD_STOP_DHCP_SERVER, cb);
}
- private void sendMessage(int what, @Nullable Object obj) {
- if (mHandler == null) {
- mLog.e("Attempting to send a command to stopped DhcpServer: " + what);
- return;
+ private void maybeNotifyStatus(@Nullable INetworkStackStatusCallback cb, int statusCode) {
+ if (cb == null) return;
+ try {
+ cb.onStatusAvailable(statusCode);
+ } catch (RemoteException e) {
+ mLog.e("Could not send status back to caller", e);
}
- mHandler.sendMessage(mHandler.obtainMessage(what, obj));
}
- private class ServerHandler extends Handler {
- ServerHandler(@NonNull Looper looper) {
- super(looper);
+ class StoppedState extends State {
+ private INetworkStackStatusCallback mOnStopCallback;
+
+ @Override
+ public void enter() {
+ maybeNotifyStatus(mOnStopCallback, STATUS_SUCCESS);
+ mOnStopCallback = null;
}
@Override
- public void handleMessage(@NonNull Message msg) {
- final INetworkStackStatusCallback cb;
+ public boolean processMessage(Message msg) {
+ switch (msg.what) {
+ case CMD_START_DHCP_SERVER:
+ final Pair<INetworkStackStatusCallback, IDhcpEventCallbacks> obj =
+ (Pair<INetworkStackStatusCallback, IDhcpEventCallbacks>) msg.obj;
+ mStartedState.mOnStartCallback = obj.first;
+ mEventCallbacks = obj.second;
+ transitionTo(mRunningState);
+ return HANDLED;
+ default:
+ return NOT_HANDLED;
+ }
+ }
+ }
+
+ class StartedState extends State {
+ private INetworkStackStatusCallback mOnStartCallback;
+
+ @Override
+ public void enter() {
+ if (mPacketListener != null) {
+ mLog.e("Starting DHCP server more than once is not supported.");
+ maybeNotifyStatus(mOnStartCallback, STATUS_UNKNOWN_ERROR);
+ mOnStartCallback = null;
+ return;
+ }
+ mPacketListener = mDeps.makePacketListener(getHandler());
+
+ if (!mPacketListener.start()) {
+ mLog.e("Fail to start DHCP Packet Listener, rollback to StoppedState");
+ deferMessage(obtainMessage(CMD_STOP_DHCP_SERVER, null));
+ maybeNotifyStatus(mOnStartCallback, STATUS_UNKNOWN_ERROR);
+ mOnStartCallback = null;
+ return;
+ }
+
+ if (mEventCallbacks != null) {
+ mLeaseRepo.addLeaseCallbacks(mEventCallbacks);
+ }
+ maybeNotifyStatus(mOnStartCallback, STATUS_SUCCESS);
+ mOnStartCallback = null;
+ }
+
+ @Override
+ public boolean processMessage(Message msg) {
switch (msg.what) {
case CMD_UPDATE_PARAMS:
final Pair<DhcpServingParams, INetworkStackStatusCallback> pair =
@@ -349,40 +434,45 @@
final DhcpServingParams params = pair.first;
mServingParams = params;
mLeaseRepo.updateParams(
- DhcpServingParams.makeIpPrefix(mServingParams.serverAddr),
+ DhcpServingParams.makeIpPrefix(params.serverAddr),
params.excludedAddrs,
- params.dhcpLeaseTimeSecs,
+ params.dhcpLeaseTimeSecs * 1000,
params.singleClientAddr);
+ maybeNotifyStatus(pair.second, STATUS_SUCCESS);
+ return HANDLED;
- cb = pair.second;
- break;
case CMD_START_DHCP_SERVER:
- final Pair<INetworkStackStatusCallback, IDhcpEventCallbacks> obj =
- (Pair<INetworkStackStatusCallback, IDhcpEventCallbacks>) msg.obj;
- cb = obj.first;
- if (obj.second != null) {
- mLeaseRepo.addLeaseCallbacks(obj.second);
- }
- mPacketListener = mDeps.makePacketListener();
- mPacketListener.start();
- break;
+ mLog.e("ALERT: START received in StartedState. Please fix caller.");
+ return HANDLED;
+
case CMD_STOP_DHCP_SERVER:
- if (mPacketListener != null) {
- mPacketListener.stop();
- mPacketListener = null;
- }
- mHandlerThread.quitSafely();
- cb = (INetworkStackStatusCallback) msg.obj;
- break;
+ mStoppedState.mOnStopCallback = (INetworkStackStatusCallback) msg.obj;
+ transitionTo(mStoppedState);
+ return HANDLED;
+
default:
- return;
+ return NOT_HANDLED;
}
- if (cb != null) {
- try {
- cb.onStatusAvailable(STATUS_SUCCESS);
- } catch (RemoteException e) {
- mLog.e("Could not send status back to caller", e);
- }
+ }
+
+ @Override
+ public void exit() {
+ mPacketListener.stop();
+ mLog.logf("DHCP Packet Listener stopped");
+ }
+ }
+
+ class RunningState extends State {
+ @Override
+ public boolean processMessage(Message msg) {
+ switch (msg.what) {
+ case CMD_SUSPEND_DHCP_SERVER:
+ // TODO: transition to the state which waits for IpServer to reconfigure the
+ // new selected prefix.
+ return HANDLED;
+ default:
+ // Fall through to StartedState.
+ return NOT_HANDLED;
}
}
}
@@ -651,8 +741,8 @@
}
private class PacketListener extends DhcpPacketListener {
- PacketListener() {
- super(mHandler);
+ PacketListener(Handler handler) {
+ super(handler);
}
@Override
@@ -686,21 +776,10 @@
return mSocket;
} catch (IOException | ErrnoException e) {
mLog.e("Error creating UDP socket", e);
- DhcpServer.this.stop(null);
return null;
} finally {
TrafficStats.setThreadStatsTag(oldTag);
}
}
}
-
- @Override
- public int getInterfaceVersion() {
- return this.VERSION;
- }
-
- @Override
- public String getInterfaceHash() {
- return this.HASH;
- }
}
diff --git a/src/android/net/ip/ConnectivityPacketTracker.java b/src/android/net/ip/ConnectivityPacketTracker.java
index bbaf61e..aa85f3a 100644
--- a/src/android/net/ip/ConnectivityPacketTracker.java
+++ b/src/android/net/ip/ConnectivityPacketTracker.java
@@ -133,9 +133,14 @@
return;
}
- final String summary = ConnectivityPacketSummary.summarize(
- mInterface.macAddr, recvbuf, length);
- if (summary == null) return;
+ final String summary;
+ try {
+ summary = ConnectivityPacketSummary.summarize(mInterface.macAddr, recvbuf, length);
+ if (summary == null) return;
+ } catch (Exception e) {
+ if (DBG) Log.d(mTag, "Error creating packet summary", e);
+ return;
+ }
if (DBG) Log.d(mTag, summary);
addLogEntry(summary + "\n[" + HexDump.toHexString(recvbuf, 0, length) + "]");
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java
index 6021c6a..c6373d7 100644
--- a/src/android/net/ip/IpClient.java
+++ b/src/android/net/ip/IpClient.java
@@ -74,7 +74,6 @@
import com.android.internal.util.IState;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.MessageUtils;
-import com.android.internal.util.Preconditions;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
import com.android.internal.util.WakeupMessage;
@@ -549,8 +548,8 @@
NetworkObserverRegistry observerRegistry, NetworkStackServiceManager nssManager,
Dependencies deps) {
super(IpClient.class.getSimpleName() + "." + ifName);
- Preconditions.checkNotNull(ifName);
- Preconditions.checkNotNull(callback);
+ Objects.requireNonNull(ifName);
+ Objects.requireNonNull(callback);
mTag = getName();
diff --git a/src/android/net/ip/IpReachabilityMonitor.java b/src/android/net/ip/IpReachabilityMonitor.java
index e1d4548..3dbe662 100644
--- a/src/android/net/ip/IpReachabilityMonitor.java
+++ b/src/android/net/ip/IpReachabilityMonitor.java
@@ -187,7 +187,7 @@
private final Dependencies mDependencies;
private final boolean mUsingMultinetworkPolicyTracker;
private final ConnectivityManager mCm;
- private final IpConnectivityLog mMetricsLog = new IpConnectivityLog();
+ private final IpConnectivityLog mMetricsLog;
private final Context mContext;
private final INetd mNetd;
private LinkProperties mLinkProperties = new LinkProperties();
@@ -201,13 +201,13 @@
Context context, InterfaceParams ifParams, Handler h, SharedLog log, Callback callback,
boolean usingMultinetworkPolicyTracker, final INetd netd) {
this(context, ifParams, h, log, callback, usingMultinetworkPolicyTracker,
- Dependencies.makeDefault(context, ifParams.name), netd);
+ Dependencies.makeDefault(context, ifParams.name), new IpConnectivityLog(), netd);
}
@VisibleForTesting
IpReachabilityMonitor(Context context, InterfaceParams ifParams, Handler h, SharedLog log,
Callback callback, boolean usingMultinetworkPolicyTracker, Dependencies dependencies,
- final INetd netd) {
+ final IpConnectivityLog metricsLog, final INetd netd) {
if (ifParams == null) throw new IllegalArgumentException("null InterfaceParams");
mContext = context;
@@ -217,6 +217,7 @@
mUsingMultinetworkPolicyTracker = usingMultinetworkPolicyTracker;
mCm = context.getSystemService(ConnectivityManager.class);
mDependencies = dependencies;
+ mMetricsLog = metricsLog;
mNetd = netd;
Preconditions.checkNotNull(mNetd);
Preconditions.checkArgument(!TextUtils.isEmpty(mInterfaceParams.name));
@@ -340,7 +341,14 @@
// TODO: Consider using NeighborEvent#isValid() here; it's more
// strict but may interact badly if other entries are somehow in
// NUD_INCOMPLETE (say, during network attach).
- if (entry.getValue().nudState != StructNdMsg.NUD_FAILED) continue;
+ final NeighborEvent val = entry.getValue();
+
+ // Find all the neighbors that have gone into FAILED state.
+ // Ignore entries for which we have never received an event. If there are neighbors
+ // that never respond to ARP/ND, the kernel will send several FAILED events, then
+ // an INCOMPLETE event, and then more FAILED events. The INCOMPLETE event will
+ // populate the map and the subsequent FAILED event will be processed.
+ if (val == null || val.nudState != StructNdMsg.NUD_FAILED) continue;
ip = entry.getKey();
for (RouteInfo route : mLinkProperties.getRoutes()) {
@@ -377,10 +385,12 @@
Log.d(TAG, "neighbour IPv4(v6): " + entry.getKey() + " neighbour state: "
+ StructNdMsg.stringForNudState(entry.getValue().nudState));
}
- if (entry.getValue().nudState != StructNdMsg.NUD_REACHABLE) return;
+ final NeighborEvent val = entry.getValue();
+ // If an entry is null, consider that probing for that neighbour has completed.
+ if (val == null || val.nudState != StructNdMsg.NUD_REACHABLE) return;
}
- // All neighbours in the watchlist are in REACHABLE state and connection is stable,
+ // Probing for all neighbours in the watchlist is complete and the connection is stable,
// restore NUD probe parameters to steadystate value. In the case where neighbours
// are responsive, this code will run before the wakelock expires.
setNeighbourParametersForSteadyState();
diff --git a/src/android/net/util/NetworkStackUtils.java b/src/android/net/util/NetworkStackUtils.java
index 6fd6043..be4c2e4 100755
--- a/src/android/net/util/NetworkStackUtils.java
+++ b/src/android/net/util/NetworkStackUtils.java
@@ -93,6 +93,37 @@
public static final String CAPTIVE_PORTAL_HTTP_URL = "captive_portal_http_url";
/**
+ * A test URL used to override configuration settings and overlays for the network validation
+ * HTTPS URL, when set in {@link android.provider.DeviceConfig} configuration.
+ *
+ * <p>This URL will be ignored if the host is not "localhost" (it can only be used to test with
+ * a local test server), and must not be set in production scenarios (as enforced by CTS tests).
+ *
+ * <p>{@link #TEST_URL_EXPIRATION_TIME} must also be set to use this setting.
+ */
+ public static final String TEST_CAPTIVE_PORTAL_HTTPS_URL = "test_captive_portal_https_url";
+
+ /**
+ * A test URL used to override configuration settings and overlays for the network validation
+ * HTTP URL, when set in {@link android.provider.DeviceConfig} configuration.
+ *
+ * <p>This URL will be ignored if the host is not "localhost" (it can only be used to test with
+ * a local test server), and must not be set in production scenarios (as enforced by CTS tests).
+ *
+ * <p>{@link #TEST_URL_EXPIRATION_TIME} must also be set to use this setting.
+ */
+ public static final String TEST_CAPTIVE_PORTAL_HTTP_URL = "test_captive_portal_http_url";
+
+ /**
+ * Expiration time of the test URL, in ms, relative to {@link System#currentTimeMillis()}.
+ *
+ * <p>After this expiration time, test URLs will be ignored. They will also be ignored if
+ * the expiration time is more than 10 minutes in the future, to avoid misconfiguration
+ * following test runs.
+ */
+ public static final String TEST_URL_EXPIRATION_TIME = "test_url_expiration_time";
+
+ /**
* The URL used for fallback HTTP captive portal detection when previous HTTP
* and HTTPS captive portal detection attemps did not return a conclusive answer.
*/
diff --git a/src/com/android/server/NetworkStackService.java b/src/com/android/server/NetworkStackService.java
index 5ab2744..46974ee 100644
--- a/src/com/android/server/NetworkStackService.java
+++ b/src/com/android/server/NetworkStackService.java
@@ -46,6 +46,7 @@
import android.os.Build;
import android.os.HandlerThread;
import android.os.IBinder;
+import android.os.Looper;
import android.os.RemoteException;
import android.util.ArraySet;
@@ -86,8 +87,7 @@
*/
public static synchronized IBinder makeConnector(Context context) {
if (sConnector == null) {
- sConnector = new NetworkStackConnector(
- context, new NetworkStackConnector.PermissionChecker());
+ sConnector = new NetworkStackConnector(context);
}
return sConnector;
}
@@ -115,6 +115,58 @@
}
/**
+ * Permission checking dependency of the connector, useful for testing.
+ */
+ public static class PermissionChecker {
+ /**
+ * @see PermissionUtil#enforceNetworkStackCallingPermission()
+ */
+ public void enforceNetworkStackCallingPermission() {
+ PermissionUtil.enforceNetworkStackCallingPermission();
+ }
+ }
+
+ /**
+ * Dependencies of {@link NetworkStackConnector}, useful for testing.
+ */
+ public static class Dependencies {
+ /** @see IpMemoryStoreService */
+ @NonNull
+ public IpMemoryStoreService makeIpMemoryStoreService(@NonNull Context context) {
+ return new IpMemoryStoreService(context);
+ }
+
+ /** @see NetworkStackNotifier */
+ @NonNull
+ public NetworkStackNotifier makeNotifier(@NonNull Context context, @NonNull Looper looper) {
+ return new NetworkStackNotifier(context, looper);
+ }
+
+ /** @see DhcpServer */
+ @NonNull
+ public DhcpServer makeDhcpServer(@NonNull Context context, @NonNull String ifName,
+ @NonNull DhcpServingParams params, @NonNull SharedLog log) {
+ return new DhcpServer(context, ifName, params, log);
+ }
+
+ /** @see NetworkMonitor */
+ @NonNull
+ public NetworkMonitor makeNetworkMonitor(@NonNull Context context,
+ @NonNull INetworkMonitorCallbacks cb, @NonNull Network network,
+ @NonNull SharedLog log, @NonNull NetworkStackServiceManager nsServiceManager) {
+ return new NetworkMonitor(context, cb, network, log, nsServiceManager);
+ }
+
+ /** @see IpClient */
+ @NonNull
+ public IpClient makeIpClient(@NonNull Context context, @NonNull String ifName,
+ @NonNull IIpClientCallbacks cb, @NonNull NetworkObserverRegistry observerRegistry,
+ @NonNull NetworkStackServiceManager nsServiceManager) {
+ return new IpClient(context, ifName, cb, observerRegistry, nsServiceManager);
+ }
+ }
+
+ /**
* Connector implementing INetworkStackConnector for clients.
*/
@VisibleForTesting
@@ -123,6 +175,7 @@
private static final int NUM_VALIDATION_LOG_LINES = 20;
private final Context mContext;
private final PermissionChecker mPermChecker;
+ private final Dependencies mDeps;
private final INetd mNetd;
private final NetworkObserverRegistry mObserverRegistry;
@GuardedBy("mIpClients")
@@ -142,19 +195,6 @@
private final ArraySet<Integer> mFrameworkAidlVersions = new ArraySet<>(1);
private final int mNetdAidlVersion;
- /**
- * Permission checking dependency of the connector, useful for testing.
- */
- @VisibleForTesting
- public static class PermissionChecker {
- /**
- * @see PermissionUtil#enforceNetworkStackCallingPermission()
- */
- public void enforceNetworkStackCallingPermission() {
- PermissionUtil.enforceNetworkStackCallingPermission();
- }
- }
-
private SharedLog addValidationLogs(Network network, String name) {
final SharedLog log = new SharedLog(NUM_VALIDATION_LOG_LINES, network + " - " + name);
synchronized (mValidationLogs) {
@@ -166,21 +206,27 @@
return log;
}
+ NetworkStackConnector(@NonNull Context context) {
+ this(context, new PermissionChecker(), new Dependencies());
+ }
+
@VisibleForTesting
public NetworkStackConnector(
- @NonNull Context context, @NonNull PermissionChecker permChecker) {
+ @NonNull Context context, @NonNull PermissionChecker permChecker,
+ @NonNull Dependencies deps) {
mContext = context;
mPermChecker = permChecker;
+ mDeps = deps;
mNetd = INetd.Stub.asInterface(
(IBinder) context.getSystemService(Context.NETD_SERVICE));
mObserverRegistry = new NetworkObserverRegistry();
- mIpMemoryStoreService = new IpMemoryStoreService(context);
+ mIpMemoryStoreService = mDeps.makeIpMemoryStoreService(context);
// NetworkStackNotifier only shows notifications relevant for API level > Q
if (ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q)) {
final HandlerThread notifierThread = new HandlerThread(
NetworkStackNotifier.class.getSimpleName());
notifierThread.start();
- mNotifier = new NetworkStackNotifier(context, notifierThread.getLooper());
+ mNotifier = mDeps.makeNotifier(context, notifierThread.getLooper());
} else {
mNotifier = null;
}
@@ -217,7 +263,7 @@
updateSystemAidlVersion(cb.getInterfaceVersion());
final DhcpServer server;
try {
- server = new DhcpServer(
+ server = mDeps.makeDhcpServer(
mContext,
ifName,
DhcpServingParams.fromParcelableObject(params),
@@ -231,7 +277,7 @@
cb.onDhcpServerCreated(STATUS_UNKNOWN_ERROR, null);
return;
}
- cb.onDhcpServerCreated(STATUS_SUCCESS, server);
+ cb.onDhcpServerCreated(STATUS_SUCCESS, server.makeConnector());
}
@Override
@@ -240,7 +286,7 @@
mPermChecker.enforceNetworkStackCallingPermission();
updateSystemAidlVersion(cb.getInterfaceVersion());
final SharedLog log = addValidationLogs(network, name);
- final NetworkMonitor nm = new NetworkMonitor(mContext, cb, network, log, this);
+ final NetworkMonitor nm = mDeps.makeNetworkMonitor(mContext, cb, network, log, this);
cb.onNetworkMonitorCreated(new NetworkMonitorConnector(nm, mPermChecker));
}
@@ -248,7 +294,8 @@
public void makeIpClient(String ifName, IIpClientCallbacks cb) throws RemoteException {
mPermChecker.enforceNetworkStackCallingPermission();
updateSystemAidlVersion(cb.getInterfaceVersion());
- final IpClient ipClient = new IpClient(mContext, ifName, cb, mObserverRegistry, this);
+ final IpClient ipClient = mDeps.makeIpClient(
+ mContext, ifName, cb, mObserverRegistry, this);
synchronized (mIpClients) {
final Iterator<WeakReference<IpClient>> it = mIpClients.iterator();
@@ -371,10 +418,10 @@
@NonNull
private final NetworkMonitor mNm;
@NonNull
- private final NetworkStackConnector.PermissionChecker mPermChecker;
+ private final PermissionChecker mPermChecker;
public NetworkMonitorConnector(@NonNull NetworkMonitor nm,
- @NonNull NetworkStackConnector.PermissionChecker permChecker) {
+ @NonNull PermissionChecker permChecker) {
mNm = nm;
mPermChecker = permChecker;
}
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index b6387ab..4c3c4bd 100755
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -71,6 +71,9 @@
import static android.net.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_HTTP_URLS;
import static android.net.util.NetworkStackUtils.DISMISS_PORTAL_IN_VALIDATED_NETWORK;
import static android.net.util.NetworkStackUtils.DNS_PROBE_PRIVATE_IP_NO_INTERNET_VERSION;
+import static android.net.util.NetworkStackUtils.TEST_CAPTIVE_PORTAL_HTTPS_URL;
+import static android.net.util.NetworkStackUtils.TEST_CAPTIVE_PORTAL_HTTP_URL;
+import static android.net.util.NetworkStackUtils.TEST_URL_EXPIRATION_TIME;
import static android.net.util.NetworkStackUtils.isEmpty;
import static android.net.util.NetworkStackUtils.isIPv6ULA;
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
@@ -119,6 +122,7 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import android.telephony.AccessNetworkConstants;
import android.telephony.CellIdentityNr;
@@ -219,6 +223,7 @@
private static final int SOCKET_TIMEOUT_MS = 10000;
private static final int PROBE_TIMEOUT_MS = 3000;
+ private static final long TEST_URL_EXPIRATION_MS = TimeUnit.MINUTES.toMillis(10);
private static final int UNSET_MCC_OR_MNC = -1;
@@ -1598,12 +1603,47 @@
return getContextByMccMnc(Integer.parseInt(mcc), UNSET_MCC_OR_MNC);
}
+ @Nullable
+ private String getTestUrl(@NonNull String key) {
+ final String strExpiration = mDependencies.getDeviceConfigProperty(NAMESPACE_CONNECTIVITY,
+ TEST_URL_EXPIRATION_TIME, null);
+ if (strExpiration == null) return null;
+
+ final long expTime;
+ try {
+ expTime = Long.parseUnsignedLong(strExpiration);
+ } catch (NumberFormatException e) {
+ loge("Invalid test URL expiration time format", e);
+ return null;
+ }
+
+ final long now = System.currentTimeMillis();
+ if (expTime < now || (expTime - now) > TEST_URL_EXPIRATION_MS) return null;
+
+ return mDependencies.getDeviceConfigProperty(NAMESPACE_CONNECTIVITY,
+ key, null /* defaultValue */);
+ }
+
private String getCaptivePortalServerHttpsUrl() {
+ final String testUrl = getTestUrl(TEST_CAPTIVE_PORTAL_HTTPS_URL);
+ if (isValidTestUrl(testUrl)) return testUrl;
final Context targetContext = getCustomizedContextOrDefault();
return getSettingFromResource(targetContext, R.string.config_captive_portal_https_url,
R.string.default_captive_portal_https_url, CAPTIVE_PORTAL_HTTPS_URL);
}
+ private static boolean isValidTestUrl(@Nullable String url) {
+ if (TextUtils.isEmpty(url)) return false;
+
+ try {
+ // Only accept test URLs on localhost
+ return Uri.parse(url).getHost().equals("localhost");
+ } catch (Throwable e) {
+ Log.wtf(TAG, "Error parsing test URL", e);
+ return false;
+ }
+ }
+
private int getDnsProbeTimeout() {
return getIntSetting(mContext, R.integer.config_captive_portal_dns_probe_timeout,
CONFIG_CAPTIVE_PORTAL_DNS_PROBE_TIMEOUT,
@@ -1678,6 +1718,8 @@
* on one URL that can be used, while NetworkMonitor may implement more complex logic.
*/
public String getCaptivePortalServerHttpUrl() {
+ final String testUrl = getTestUrl(TEST_CAPTIVE_PORTAL_HTTP_URL);
+ if (isValidTestUrl(testUrl)) return testUrl;
final Context targetContext = getCustomizedContextOrDefault();
return getSettingFromResource(targetContext, R.string.config_captive_portal_http_url,
R.string.default_captive_portal_http_url, CAPTIVE_PORTAL_HTTP_URL);
diff --git a/src/com/android/server/util/PermissionUtil.java b/src/com/android/server/util/PermissionUtil.java
index 28dad25..3dff715 100644
--- a/src/com/android/server/util/PermissionUtil.java
+++ b/src/com/android/server/util/PermissionUtil.java
@@ -73,7 +73,7 @@
*/
public static void checkDumpPermission() {
final int caller = getCallingUid();
- if (caller != Process.SYSTEM_UID && caller != Process.ROOT_UID
+ if (caller != Process.myUid() && caller != Process.SYSTEM_UID && caller != Process.ROOT_UID
&& caller != Process.SHELL_UID) {
throw new SecurityException("No dump permissions for caller: " + caller);
}
diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
index b149119..fcf12aa 100644
--- a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
+++ b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
@@ -450,6 +450,11 @@
mNetworkObserverRegistry.register(mNetd);
mIpc = new IpClient(mContext, mIfaceName, mCb, mNetworkObserverRegistry,
mNetworkStackServiceManager, mDependencies);
+ // Wait for IpClient to enter its initial state. Otherwise, additional setup steps or tests
+ // that mock IpClient's dependencies might interact with those mocks while IpClient is
+ // starting. This would cause UnfinishedStubbingExceptions as mocks cannot be interacted
+ // with while they are being stubbed.
+ HandlerUtilsKt.waitForIdle(mIpc.getHandler(), TEST_TIMEOUT_MS);
// Tell the IpMemoryStore immediately to answer any question about network attributes with a
// null response. Otherwise, the DHCP client will wait for two seconds before starting,
diff --git a/tests/unit/src/android/net/dhcp/DhcpServerTest.java b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
index 86f8a25..c925789 100644
--- a/tests/unit/src/android/net/dhcp/DhcpServerTest.java
+++ b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
@@ -36,7 +36,6 @@
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -52,13 +51,12 @@
import android.net.dhcp.DhcpServer.Clock;
import android.net.dhcp.DhcpServer.Dependencies;
import android.net.util.SharedLog;
-import android.os.HandlerThread;
import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.testing.TestableLooper.RunWithLooper;
import androidx.test.filters.SmallTest;
+import com.android.testutils.HandlerUtilsKt;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -76,7 +74,6 @@
@RunWith(AndroidTestingRunner.class)
@SmallTest
-@RunWithLooper
public class DhcpServerTest {
private static final String TEST_IFACE = "testiface";
@@ -107,6 +104,7 @@
private static final DhcpLease TEST_LEASE_WITH_HOSTNAME = new DhcpLease(null, TEST_CLIENT_MAC,
TEST_CLIENT_ADDR, TEST_PREFIX_LENGTH, TEST_LEASE_EXPTIME_SECS * 1000L + TEST_CLOCK_TIME,
TEST_HOSTNAME);
+ private static final int TEST_TIMEOUT_MS = 10000;
@NonNull @Mock
private Context mContext;
@@ -127,10 +125,6 @@
private ArgumentCaptor<Inet4Address> mResponseDstAddrCaptor;
@NonNull
- private HandlerThread mHandlerThread;
- @NonNull
- private TestableLooper mLooper;
- @NonNull
private DhcpServer mServer;
@Nullable
@@ -167,7 +161,7 @@
private void startServer() throws Exception {
mServer.start(mAssertSuccessCallback);
- mLooper.processAllMessages();
+ HandlerUtilsKt.waitForIdle(mServer.getHandler(), TEST_TIMEOUT_MS);
}
@Before
@@ -176,16 +170,14 @@
when(mDeps.makeLeaseRepository(any(), any(), any())).thenReturn(mRepository);
when(mDeps.makeClock()).thenReturn(mClock);
- when(mDeps.makePacketListener()).thenReturn(mPacketListener);
+ when(mDeps.makePacketListener(any())).thenReturn(mPacketListener);
when(mDeps.isFeatureEnabled(eq(mContext), eq(DHCP_RAPID_COMMIT_VERSION))).thenReturn(true);
doNothing().when(mDeps)
.sendPacket(any(), mSentPacketCaptor.capture(), mResponseDstAddrCaptor.capture());
when(mClock.elapsedRealtime()).thenReturn(TEST_CLOCK_TIME);
+ when(mPacketListener.start()).thenReturn(true);
- mLooper = TestableLooper.get(this);
- mHandlerThread = spy(new HandlerThread("TestDhcpServer"));
- when(mHandlerThread.getLooper()).thenReturn(mLooper.getLooper());
- mServer = new DhcpServer(mContext, mHandlerThread, TEST_IFACE, makeServingParams(),
+ mServer = new DhcpServer(mContext, TEST_IFACE, makeServingParams(),
new SharedLog(DhcpServerTest.class.getSimpleName()), mDeps);
}
@@ -193,9 +185,8 @@
public void tearDown() throws Exception {
verify(mRepository, never()).addLeaseCallbacks(eq(null));
mServer.stop(mAssertSuccessCallback);
- mLooper.processMessages(1);
+ HandlerUtilsKt.waitForIdle(mServer.getHandler(), TEST_TIMEOUT_MS);
verify(mPacketListener, times(1)).stop();
- verify(mHandlerThread, times(1)).quitSafely();
}
@Test
@@ -207,8 +198,8 @@
@Test
public void testStartWithCallbacks() throws Exception {
- mServer.startWithCallbacks(mAssertSuccessCallback, mEventCallbacks);
- mLooper.processAllMessages();
+ mServer.start(mAssertSuccessCallback, mEventCallbacks);
+ HandlerUtilsKt.waitForIdle(mServer.getHandler(), TEST_TIMEOUT_MS);
verify(mRepository).addLeaseCallbacks(eq(mEventCallbacks));
}
diff --git a/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt b/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt
index ac50651..863e268 100644
--- a/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt
+++ b/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt
@@ -22,6 +22,7 @@
import android.net.LinkAddress
import android.net.LinkProperties
import android.net.RouteInfo
+import android.net.metrics.IpConnectivityLog
import android.net.netlink.StructNdMsg.NUD_FAILED
import android.net.netlink.StructNdMsg.NUD_STALE
import android.net.netlink.makeNewNeighMessage
@@ -35,6 +36,7 @@
import android.system.OsConstants.EAGAIN
import androidx.test.filters.SmallTest
import androidx.test.runner.AndroidJUnit4
+import com.android.testutils.waitForIdle
import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -47,7 +49,6 @@
import org.mockito.Mockito.doAnswer
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.mock
-import org.mockito.Mockito.never
import org.mockito.Mockito.timeout
import org.mockito.Mockito.verify
import java.io.FileDescriptor
@@ -102,6 +103,7 @@
private val context = mock(Context::class.java)
private val netd = mock(INetd::class.java)
private val fd = mock(FileDescriptor::class.java)
+ private val metricsLog = mock(IpConnectivityLog::class.java)
private val handlerThread = HandlerThread(IpReachabilityMonitorTest::class.simpleName)
private val handler by lazy { Handler(handlerThread.looper) }
@@ -181,6 +183,7 @@
callback,
false /* useMultinetworkPolicyTracker */,
dependencies,
+ metricsLog,
netd))
}
reachabilityMonitor = monitorFuture.get(TEST_TIMEOUT_MS, TimeUnit.MILLISECONDS)
@@ -190,27 +193,18 @@
@After
fun tearDown() {
+ // Ensure the handler thread is not accessing the fd while changing its mock
+ handlerThread.waitForIdle(TEST_TIMEOUT_MS)
doReturn(false).`when`(fd).valid()
handlerThread.quitSafely()
}
- // TODO: fix this bug
@Test
- fun testLoseProvisioning_CrashIfFirstProbeIsFailed() {
+ fun testLoseProvisioning_FirstProbeIsFailed() {
reachabilityMonitor.updateLinkProperties(TEST_LINK_PROPERTIES)
- doAnswer {
- // Set the fd as invalid when the event listener is removed, to avoid a crash when the
- // reader tries to close the mock fd.
- // This does not exactly reflect behavior on close, but this test is only demonstrating
- // a bug that causes the close, and it will be removed when the bug fixed.
- doReturn(false).`when`(fd).valid()
- }.`when`(neighborMonitor.msgQueue).removeOnFileDescriptorEventListener(any())
-
neighborMonitor.enqueuePacket(makeNewNeighMessage(TEST_IPV4_DNS, NUD_FAILED))
- verify(neighborMonitor.msgQueue, timeout(TEST_TIMEOUT_MS))
- .removeOnFileDescriptorEventListener(any())
- verify(callback, never()).notifyLost(eq(TEST_IPV4_DNS), anyString())
+ verify(callback, timeout(TEST_TIMEOUT_MS)).notifyLost(eq(TEST_IPV4_DNS), anyString())
}
private fun runLoseProvisioningTest(lostNeighbor: InetAddress) {
diff --git a/tests/unit/src/android/net/netlink/NetlinkTestUtils.kt b/tests/unit/src/android/net/netlink/NetlinkTestUtils.kt
index 6655e96..1bc3ab0 100644
--- a/tests/unit/src/android/net/netlink/NetlinkTestUtils.kt
+++ b/tests/unit/src/android/net/netlink/NetlinkTestUtils.kt
@@ -74,7 +74,7 @@
(if (neighAddr is Inet6Address) "1400" else "0800") +
"0100" + // type (1 == NDA_DST, for neighbor messages)
// IP address:
- encodeToString(neighAddr.address, false /* upperCase */) +
+ encodeToString(neighAddr.address) +
// -- struct nlattr: NDA_LLADDR --
"0a00" + // length = 10
"0200" + // type (2 == NDA_LLADDR, for neighbor messages)
diff --git a/tests/unit/src/com/android/server/NetworkStackServiceTest.kt b/tests/unit/src/com/android/server/NetworkStackServiceTest.kt
new file mode 100644
index 0000000..52556bc
--- /dev/null
+++ b/tests/unit/src/com/android/server/NetworkStackServiceTest.kt
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server
+
+import android.content.Context
+import android.net.IIpMemoryStoreCallbacks
+import android.net.INetd
+import android.net.INetworkMonitorCallbacks
+import android.net.INetworkStackConnector
+import android.net.InetAddresses.parseNumericAddress
+import android.net.Network
+import android.net.dhcp.DhcpServer
+import android.net.dhcp.DhcpServingParamsParcel
+import android.net.dhcp.IDhcpServer
+import android.net.dhcp.IDhcpServerCallbacks
+import android.net.ip.IIpClientCallbacks
+import android.net.ip.IpClient
+import android.net.shared.Inet4AddressUtils.inet4AddressToIntHTH
+import android.os.Build
+import android.os.IBinder
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.server.NetworkStackService.Dependencies
+import com.android.server.NetworkStackService.NetworkStackConnector
+import com.android.server.NetworkStackService.PermissionChecker
+import com.android.server.connectivity.NetworkMonitor
+import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService
+import com.android.testutils.DevSdkIgnoreRule
+import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import java.io.FileDescriptor
+import java.io.PrintWriter
+import java.io.StringWriter
+import java.net.Inet4Address
+import kotlin.reflect.KVisibility
+import kotlin.reflect.full.declaredMemberFunctions
+import kotlin.test.assertEquals
+
+private val TEST_NETD_VERSION = 9991001
+private val TEST_NETD_HASH = "test_netd_hash"
+
+private val TEST_IPMEMORYSTORE_VERSION = 9991002
+private val TEST_IPMEMORYSTORE_HASH = "test_ipmemorystore_hash"
+
+private val TEST_IFACE = "test_iface"
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class NetworkStackServiceTest {
+ @Rule @JvmField
+ val ignoreRule = DevSdkIgnoreRule()
+
+ private val permChecker = mock(PermissionChecker::class.java)
+ private val mockIpMemoryStoreService = mock(IpMemoryStoreService::class.java)
+ private val mockDhcpServer = mock(DhcpServer::class.java)
+ private val mockNetworkMonitor = mock(NetworkMonitor::class.java)
+ private val mockIpClient = mock(IpClient::class.java)
+ private val deps = mock(Dependencies::class.java).apply {
+ doReturn(mockIpMemoryStoreService).`when`(this).makeIpMemoryStoreService(any())
+ doReturn(mockDhcpServer).`when`(this).makeDhcpServer(any(), any(), any(), any())
+ doReturn(mockNetworkMonitor).`when`(this).makeNetworkMonitor(any(), any(), any(), any(),
+ any())
+ doReturn(mockIpClient).`when`(this).makeIpClient(any(), any(), any(), any(), any())
+ }
+ private val netd = mock(INetd::class.java).apply {
+ doReturn(TEST_NETD_VERSION).`when`(this).interfaceVersion
+ doReturn(TEST_NETD_HASH).`when`(this).interfaceHash
+ }
+ private val netdBinder = mock(IBinder::class.java).apply {
+ doReturn(netd).`when`(this).queryLocalInterface(any())
+ }
+ private val context = mock(Context::class.java).apply {
+ doReturn(netdBinder).`when`(this).getSystemService(Context.NETD_SERVICE)
+ }
+
+ private val connector = NetworkStackConnector(context, permChecker, deps)
+
+ @Test
+ fun testDumpVersion_Q() {
+ prepareDumpVersionTest()
+
+ val dumpsysOut = StringWriter()
+ connector.dump(FileDescriptor(), PrintWriter(dumpsysOut, true /* autoFlush */),
+ arrayOf("version") /* args */)
+
+ assertEquals("NetworkStack version:\n" +
+ "NetworkStackConnector: ${INetworkStackConnector.VERSION}\n" +
+ "SystemServer: {9990001, 9990002, 9990003, 9990004, 9990005}\n" +
+ "Netd: $TEST_NETD_VERSION\n\n",
+ dumpsysOut.toString())
+ }
+
+ @Test @IgnoreUpTo(Build.VERSION_CODES.Q)
+ fun testDumpVersion() {
+ // TODO: log interface hash on R+ and test it
+ }
+
+ fun prepareDumpVersionTest() {
+ // Call each method on INetworkStackConnector and verify that it notes down the version of
+ // the remote.
+ // Call fetchIpMemoryStore
+ val mockIpMemoryStoreCb = mock(IIpMemoryStoreCallbacks::class.java)
+ doReturn(9990001).`when`(mockIpMemoryStoreCb).interfaceVersion
+ doReturn("fetch_ipmemorystore_hash").`when`(mockIpMemoryStoreCb).interfaceHash
+
+ connector.fetchIpMemoryStore(mockIpMemoryStoreCb)
+ // IpMemoryStore was created at initialization time
+ verify(mockIpMemoryStoreCb).onIpMemoryStoreFetched(any())
+
+ // Call makeDhcpServer
+ val testParams = DhcpServingParamsParcel()
+ testParams.linkMtu = 1500
+ testParams.dhcpLeaseTimeSecs = 3600L
+ testParams.serverAddr = inet4AddressToIntHTH(
+ parseNumericAddress("192.168.1.1") as Inet4Address)
+ testParams.serverAddrPrefixLength = 24
+
+ val mockDhcpCb = mock(IDhcpServerCallbacks::class.java)
+ doReturn(9990002).`when`(mockDhcpCb).interfaceVersion
+ doReturn("dhcp_server_hash").`when`(mockDhcpCb).interfaceHash
+
+ connector.makeDhcpServer(TEST_IFACE, testParams, mockDhcpCb)
+
+ verify(deps).makeDhcpServer(any(), eq(TEST_IFACE), any(), any())
+ verify(mockDhcpCb).onDhcpServerCreated(eq(IDhcpServer.STATUS_SUCCESS), any())
+
+ // Call makeNetworkMonitor
+ // Use a spy of INetworkMonitorCallbacks and not a mock, as mockito can't create a mock on Q
+ // because of the missing CaptivePortalData class that is an argument of one of the methods
+ val mockNetworkMonitorCb = spy(INetworkMonitorCallbacks.Stub.asInterface(
+ mock(IBinder::class.java)))
+ doReturn(9990003).`when`(mockNetworkMonitorCb).interfaceVersion
+ doReturn("networkmonitor_hash").`when`(mockNetworkMonitorCb).interfaceHash
+
+ connector.makeNetworkMonitor(Network(123), "test_nm", mockNetworkMonitorCb)
+
+ verify(deps).makeNetworkMonitor(any(), any(), eq(Network(123)), any(), any())
+ verify(mockNetworkMonitorCb).onNetworkMonitorCreated(any())
+
+ // Call makeIpClient
+ // Use a spy of IIpClientCallbacks instead of a mock, as mockito cannot create a mock on Q
+ // because of the missing CaptivePortalData class that is an argument on one of the methods
+ val mockIpClientCb = mock(IIpClientCallbacks::class.java)
+ doReturn(9990004).`when`(mockIpClientCb).interfaceVersion
+ doReturn("ipclient_hash").`when`(mockIpClientCb).interfaceHash
+
+ connector.makeIpClient(TEST_IFACE, mockIpClientCb)
+
+ verify(deps).makeIpClient(any(), eq(TEST_IFACE), any(), any(), any())
+ verify(mockIpClientCb).onIpClientCreated(any())
+
+ // Call some methods one more time with a shared version number and hash to verify no
+ // duplicates are reported
+ doReturn(9990005).`when`(mockIpMemoryStoreCb).interfaceVersion
+ doReturn("multiple_use_hash").`when`(mockIpMemoryStoreCb).interfaceHash
+ connector.fetchIpMemoryStore(mockIpMemoryStoreCb)
+ verify(mockIpMemoryStoreCb, times(2)).onIpMemoryStoreFetched(any())
+
+ doReturn(9990005).`when`(mockDhcpCb).interfaceVersion
+ doReturn("multiple_use_hash").`when`(mockDhcpCb).interfaceHash
+ connector.makeDhcpServer(TEST_IFACE, testParams, mockDhcpCb)
+ verify(mockDhcpCb, times(2)).onDhcpServerCreated(eq(IDhcpServer.STATUS_SUCCESS), any())
+
+ // Verify all methods were covered by the test (4 methods + getVersion + getHash)
+ assertEquals(6, INetworkStackConnector::class.declaredMemberFunctions.count {
+ it.visibility == KVisibility.PUBLIC
+ })
+ }
+}
\ No newline at end of file
diff --git a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
index 145c89c..7cf130e 100644
--- a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
+++ b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
@@ -40,6 +40,10 @@
import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_USE_HTTPS;
import static android.net.util.NetworkStackUtils.DISMISS_PORTAL_IN_VALIDATED_NETWORK;
import static android.net.util.NetworkStackUtils.DNS_PROBE_PRIVATE_IP_NO_INTERNET_VERSION;
+import static android.net.util.NetworkStackUtils.TEST_CAPTIVE_PORTAL_HTTPS_URL;
+import static android.net.util.NetworkStackUtils.TEST_CAPTIVE_PORTAL_HTTP_URL;
+import static android.net.util.NetworkStackUtils.TEST_URL_EXPIRATION_TIME;
+import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
import static com.android.networkstack.util.DnsUtils.PRIVATE_DNS_PROBE_HOST_SUFFIX;
import static com.android.server.connectivity.NetworkMonitor.extractCharset;
@@ -172,6 +176,7 @@
import java.util.Objects;
import java.util.Random;
import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLHandshakeException;
@@ -203,6 +208,7 @@
private @Mock HttpURLConnection mOtherHttpsConnection2;
private @Mock HttpURLConnection mFallbackConnection;
private @Mock HttpURLConnection mOtherFallbackConnection;
+ private @Mock HttpURLConnection mTestOverriddenUrlConnection;
private @Mock HttpURLConnection mCapportApiConnection;
private @Mock Random mRandom;
private @Mock NetworkMonitor.Dependencies mDependencies;
@@ -231,6 +237,8 @@
private static final String TEST_HTTPS_OTHER_URL2 = "https://other2.google.com/gen_204";
private static final String TEST_FALLBACK_URL = "http://fallback.google.com/gen_204";
private static final String TEST_OTHER_FALLBACK_URL = "http://otherfallback.google.com/gen_204";
+ private static final String TEST_INVALID_OVERRIDE_URL = "https://override.example.com/test";
+ private static final String TEST_OVERRIDE_URL = "http://localhost:12345/test";
private static final String TEST_CAPPORT_API_URL = "https://capport.example.com/api";
private static final String TEST_LOGIN_URL = "https://testportal.example.com/login";
private static final String TEST_VENUE_INFO_URL = "https://venue.example.com/info";
@@ -462,6 +470,9 @@
return mFallbackConnection;
case TEST_OTHER_FALLBACK_URL:
return mOtherFallbackConnection;
+ case TEST_OVERRIDE_URL:
+ case TEST_INVALID_OVERRIDE_URL:
+ return mTestOverriddenUrlConnection;
case TEST_CAPPORT_API_URL:
return mCapportApiConnection;
default:
@@ -1189,6 +1200,84 @@
}
@Test
+ public void testIsCaptivePortal_OverriddenHttpsUrlValid() throws Exception {
+ setDeviceConfig(TEST_URL_EXPIRATION_TIME,
+ String.valueOf(currentTimeMillis() + TimeUnit.MINUTES.toMillis(9)));
+ setDeviceConfig(TEST_CAPTIVE_PORTAL_HTTPS_URL, TEST_OVERRIDE_URL);
+ setStatus(mTestOverriddenUrlConnection, 204);
+ setStatus(mHttpConnection, 204);
+
+ runValidatedNetworkTest();
+ verify(mHttpsConnection, never()).getResponseCode();
+ verify(mTestOverriddenUrlConnection).getResponseCode();
+ }
+
+ @Test
+ public void testIsCaptivePortal_OverriddenHttpUrlPortal() throws Exception {
+ setDeviceConfig(TEST_URL_EXPIRATION_TIME,
+ String.valueOf(currentTimeMillis() + TimeUnit.MINUTES.toMillis(9)));
+ setDeviceConfig(TEST_CAPTIVE_PORTAL_HTTP_URL, TEST_OVERRIDE_URL);
+ setStatus(mHttpsConnection, 500);
+ setPortal302(mTestOverriddenUrlConnection);
+
+ runPortalNetworkTest();
+ verify(mHttpConnection, never()).getResponseCode();
+ verify(mTestOverriddenUrlConnection).getResponseCode();
+ }
+
+ @Test
+ public void testIsCaptivePortal_InvalidHttpOverrideUrl() throws Exception {
+ setDeviceConfig(TEST_URL_EXPIRATION_TIME,
+ String.valueOf(currentTimeMillis() + TimeUnit.MINUTES.toMillis(9)));
+ setDeviceConfig(TEST_CAPTIVE_PORTAL_HTTP_URL, TEST_INVALID_OVERRIDE_URL);
+ setStatus(mHttpsConnection, 500);
+ setPortal302(mHttpConnection);
+
+ runPortalNetworkTest();
+ verify(mTestOverriddenUrlConnection, never()).getResponseCode();
+ verify(mHttpConnection).getResponseCode();
+ }
+
+ @Test
+ public void testIsCaptivePortal_InvalidHttpsOverrideUrl() throws Exception {
+ setDeviceConfig(TEST_URL_EXPIRATION_TIME,
+ String.valueOf(currentTimeMillis() + TimeUnit.MINUTES.toMillis(9)));
+ setDeviceConfig(TEST_CAPTIVE_PORTAL_HTTPS_URL, TEST_INVALID_OVERRIDE_URL);
+ setStatus(mHttpsConnection, 204);
+ setStatus(mHttpConnection, 204);
+
+ runValidatedNetworkTest();
+ verify(mTestOverriddenUrlConnection, never()).getResponseCode();
+ verify(mHttpsConnection).getResponseCode();
+ }
+
+ @Test
+ public void testIsCaptivePortal_ExpiredHttpsOverrideUrl() throws Exception {
+ setDeviceConfig(TEST_URL_EXPIRATION_TIME,
+ String.valueOf(currentTimeMillis() - TimeUnit.MINUTES.toMillis(1)));
+ setDeviceConfig(TEST_CAPTIVE_PORTAL_HTTPS_URL, TEST_OVERRIDE_URL);
+ setStatus(mHttpsConnection, 204);
+ setStatus(mHttpConnection, 204);
+
+ runValidatedNetworkTest();
+ verify(mTestOverriddenUrlConnection, never()).getResponseCode();
+ verify(mHttpsConnection).getResponseCode();
+ }
+
+ @Test
+ public void testIsCaptivePortal_TestHttpUrlExpirationTooLarge() throws Exception {
+ setDeviceConfig(TEST_URL_EXPIRATION_TIME,
+ String.valueOf(currentTimeMillis() + TimeUnit.MINUTES.toMillis(20)));
+ setDeviceConfig(TEST_CAPTIVE_PORTAL_HTTP_URL, TEST_OVERRIDE_URL);
+ setStatus(mHttpsConnection, 500);
+ setPortal302(mHttpConnection);
+
+ runPortalNetworkTest();
+ verify(mTestOverriddenUrlConnection, never()).getResponseCode();
+ verify(mHttpConnection).getResponseCode();
+ }
+
+ @Test
public void testIsDataStall_EvaluationDisabled() {
setDataStallEvaluationType(0);
WrappedNetworkMonitor wrappedMonitor = makeMeteredNetworkMonitor();
@@ -1985,6 +2074,11 @@
eq(DISMISS_PORTAL_IN_VALIDATED_NETWORK), anyBoolean())).thenReturn(enabled);
}
+ private void setDeviceConfig(String key, String value) {
+ doReturn(value).when(mDependencies).getDeviceConfigProperty(eq(NAMESPACE_CONNECTIVITY),
+ eq(key), any() /* defaultValue */);
+ }
+
private NetworkMonitor runPortalNetworkTest() throws RemoteException {
final NetworkMonitor nm = runNetworkTest(VALIDATION_RESULT_PORTAL,
0 /* probesSucceeded */, TEST_LOGIN_URL);