blob: 818565d7d2675e2519dacd1eb5c784951884ddb6 [file] [log] [blame]
[email protected]b47feba2012-04-24 01:34:411// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]6dbdaa82011-08-11 16:05:562// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/android/network_library.h"
6
[email protected]6dbdaa82011-08-11 16:05:567#include "base/android/jni_android.h"
8#include "base/android/jni_array.h"
9#include "base/android/jni_string.h"
[email protected]b47feba2012-04-24 01:34:4110#include "base/android/scoped_java_ref.h"
[email protected]6dbdaa82011-08-11 16:05:5611#include "base/logging.h"
[email protected]e46f66152012-07-19 20:02:5512#include "jni/AndroidNetworkLibrary_jni.h"
Eric Orth8afaf152018-11-07 21:01:2613#include "net/dns/public/dns_protocol.h"
[email protected]6dbdaa82011-08-11 16:05:5614
15using base::android::AttachCurrentThread;
[email protected]6dbdaa82011-08-11 16:05:5616using base::android::ConvertJavaStringToUTF8;
17using base::android::ConvertUTF8ToJavaString;
[email protected]b47feba2012-04-24 01:34:4118using base::android::ScopedJavaLocalRef;
[email protected]6dbdaa82011-08-11 16:05:5619using base::android::ToJavaArrayOfByteArray;
20using base::android::ToJavaByteArray;
21
22namespace net {
23namespace android {
24
[email protected]23073f92014-01-17 22:52:1725void VerifyX509CertChain(const std::vector<std::string>& cert_chain,
David Benjamina63f1d12018-09-06 17:27:1726 base::StringPiece auth_type,
27 base::StringPiece host,
[email protected]23073f92014-01-17 22:52:1728 CertVerifyStatusAndroid* status,
29 bool* is_issued_by_known_root,
30 std::vector<std::string>* verified_chain) {
[email protected]6dbdaa82011-08-11 16:05:5631 JNIEnv* env = AttachCurrentThread();
[email protected]6dbdaa82011-08-11 16:05:5632
[email protected]b47feba2012-04-24 01:34:4133 ScopedJavaLocalRef<jobjectArray> chain_byte_array =
34 ToJavaArrayOfByteArray(env, cert_chain);
35 DCHECK(!chain_byte_array.is_null());
[email protected]6dbdaa82011-08-11 16:05:5636
[email protected]b47feba2012-04-24 01:34:4137 ScopedJavaLocalRef<jstring> auth_string =
38 ConvertUTF8ToJavaString(env, auth_type);
39 DCHECK(!auth_string.is_null());
[email protected]6dbdaa82011-08-11 16:05:5640
[email protected]23073f92014-01-17 22:52:1741 ScopedJavaLocalRef<jstring> host_string =
42 ConvertUTF8ToJavaString(env, host);
43 DCHECK(!host_string.is_null());
[email protected]6dbdaa82011-08-11 16:05:5644
[email protected]23073f92014-01-17 22:52:1745 ScopedJavaLocalRef<jobject> result =
46 Java_AndroidNetworkLibrary_verifyServerCertificates(
torne948f3662016-08-16 15:10:4447 env, chain_byte_array, auth_string, host_string);
[email protected]23073f92014-01-17 22:52:1748
torne1cf2e5dc2016-08-31 16:49:5849 ExtractCertVerifyResult(result, status, is_issued_by_known_root,
50 verified_chain);
[email protected]6dbdaa82011-08-11 16:05:5651}
52
wtc69f8ea82015-06-04 00:08:1353void AddTestRootCertificate(const uint8_t* cert, size_t len) {
[email protected]87ccb992012-12-12 01:31:5554 JNIEnv* env = AttachCurrentThread();
55 ScopedJavaLocalRef<jbyteArray> cert_array = ToJavaByteArray(env, cert, len);
56 DCHECK(!cert_array.is_null());
torne948f3662016-08-16 15:10:4457 Java_AndroidNetworkLibrary_addTestRootCertificate(env, cert_array);
[email protected]87ccb992012-12-12 01:31:5558}
59
60void ClearTestRootCertificates() {
61 JNIEnv* env = AttachCurrentThread();
62 Java_AndroidNetworkLibrary_clearTestRootCertificates(env);
63}
64
mgershd21d6d142016-12-14 23:06:3665bool IsCleartextPermitted(const std::string& host) {
66 JNIEnv* env = AttachCurrentThread();
67 ScopedJavaLocalRef<jstring> host_string = ConvertUTF8ToJavaString(env, host);
68 return Java_AndroidNetworkLibrary_isCleartextPermitted(env, host_string);
69}
70
[email protected]c470e1b2012-06-15 07:46:3971bool HaveOnlyLoopbackAddresses() {
72 JNIEnv* env = AttachCurrentThread();
73 return Java_AndroidNetworkLibrary_haveOnlyLoopbackAddresses(env);
74}
75
[email protected]6dbdaa82011-08-11 16:05:5676bool GetMimeTypeFromExtension(const std::string& extension,
77 std::string* result) {
78 JNIEnv* env = AttachCurrentThread();
79
[email protected]b47feba2012-04-24 01:34:4180 ScopedJavaLocalRef<jstring> extension_string =
81 ConvertUTF8ToJavaString(env, extension);
82 ScopedJavaLocalRef<jstring> ret =
torne948f3662016-08-16 15:10:4483 Java_AndroidNetworkLibrary_getMimeTypeFromExtension(env,
84 extension_string);
[email protected]6dbdaa82011-08-11 16:05:5685
[email protected]2bde22882012-11-06 12:27:0886 if (!ret.obj())
[email protected]6dbdaa82011-08-11 16:05:5687 return false;
[email protected]b47feba2012-04-24 01:34:4188 *result = ConvertJavaStringToUTF8(ret);
[email protected]6dbdaa82011-08-11 16:05:5689 return true;
90}
91
[email protected]74d9c5242014-05-01 05:10:0392std::string GetTelephonyNetworkCountryIso() {
93 return base::android::ConvertJavaStringToUTF8(
94 Java_AndroidNetworkLibrary_getNetworkCountryIso(
wnwen8fc102852017-04-24 13:38:0495 base::android::AttachCurrentThread()));
[email protected]74d9c5242014-05-01 05:10:0396}
97
98std::string GetTelephonyNetworkOperator() {
99 return base::android::ConvertJavaStringToUTF8(
100 Java_AndroidNetworkLibrary_getNetworkOperator(
wnwen8fc102852017-04-24 13:38:04101 base::android::AttachCurrentThread()));
[email protected]74d9c5242014-05-01 05:10:03102}
103
tbansala2e9f20c2015-09-03 20:05:08104std::string GetTelephonySimOperator() {
105 return base::android::ConvertJavaStringToUTF8(
106 Java_AndroidNetworkLibrary_getSimOperator(
wnwen8fc102852017-04-24 13:38:04107 base::android::AttachCurrentThread()));
tbansala2e9f20c2015-09-03 20:05:08108}
109
110bool GetIsRoaming() {
111 return Java_AndroidNetworkLibrary_getIsRoaming(
wnwen8fc102852017-04-24 13:38:04112 base::android::AttachCurrentThread());
tbansala2e9f20c2015-09-03 20:05:08113}
114
tbansala7581d82016-11-24 18:00:33115bool GetIsCaptivePortal() {
116 return Java_AndroidNetworkLibrary_getIsCaptivePortal(
wnwen8fc102852017-04-24 13:38:04117 base::android::AttachCurrentThread());
tbansala7581d82016-11-24 18:00:33118}
119
tbansalc5a1c912016-07-01 22:11:56120std::string GetWifiSSID() {
121 return base::android::ConvertJavaStringToUTF8(
122 Java_AndroidNetworkLibrary_getWifiSSID(
wnwen8fc102852017-04-24 13:38:04123 base::android::AttachCurrentThread()));
tbansalc5a1c912016-07-01 22:11:56124}
125
Paul Jensen43b695ff2018-05-29 21:04:05126internal::ConfigParsePosixResult GetDnsServers(
127 std::vector<IPEndPoint>* dns_servers) {
pauljensenf3ef7a582017-01-10 16:14:50128 JNIEnv* env = AttachCurrentThread();
129 std::vector<std::string> dns_servers_strings;
130 base::android::JavaArrayOfByteArrayToStringVector(
Torne (Richard Coles)3c22e8302018-10-12 18:34:22131 env, Java_AndroidNetworkLibrary_getDnsServers(env), &dns_servers_strings);
Paul Jensen43b695ff2018-05-29 21:04:05132 if (dns_servers_strings.size() == 0)
133 return internal::CONFIG_PARSE_POSIX_NO_NAMESERVERS;
134 if (dns_servers_strings.size() == 1 && dns_servers_strings[0].size() == 1)
135 return internal::CONFIG_PARSE_POSIX_PRIVATE_DNS_ACTIVE;
pauljensenf3ef7a582017-01-10 16:14:50136 for (const std::string& dns_address_string : dns_servers_strings) {
137 IPAddress dns_address(
138 reinterpret_cast<const uint8_t*>(dns_address_string.c_str()),
139 dns_address_string.size());
140 IPEndPoint dns_server(dns_address, dns_protocol::kDefaultPort);
141 dns_servers->push_back(dns_server);
142 }
Paul Jensen43b695ff2018-05-29 21:04:05143 return internal::CONFIG_PARSE_POSIX_OK;
pauljensenf3ef7a582017-01-10 16:14:50144}
145
Paul Jensenec3c11122017-11-28 16:48:38146void TagSocket(SocketDescriptor socket, uid_t uid, int32_t tag) {
147 Java_AndroidNetworkLibrary_tagSocket(AttachCurrentThread(), socket, uid, tag);
148}
149
[email protected]6dbdaa82011-08-11 16:05:56150} // namespace android
151} // namespace net