blob: 48f3a9582311a6b6427db61a65634a681744b731 [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"
pauljensenf3ef7a582017-01-10 16:14:5013#include "net/dns/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,
26 const std::string& auth_type,
27 const std::string& host,
28 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
wtc69f8ea82015-06-04 00:08:1365bool StoreKeyPair(const uint8_t* public_key,
[email protected]6dbdaa82011-08-11 16:05:5666 size_t public_len,
wtc69f8ea82015-06-04 00:08:1367 const uint8_t* private_key,
[email protected]6dbdaa82011-08-11 16:05:5668 size_t private_len) {
69 JNIEnv* env = AttachCurrentThread();
[email protected]b47feba2012-04-24 01:34:4170 ScopedJavaLocalRef<jbyteArray> public_array =
71 ToJavaByteArray(env, public_key, public_len);
72 ScopedJavaLocalRef<jbyteArray> private_array =
73 ToJavaByteArray(env, private_key, private_len);
wnwen8fc102852017-04-24 13:38:0474 jboolean ret =
75 Java_AndroidNetworkLibrary_storeKeyPair(env, public_array, private_array);
[email protected]b47feba2012-04-24 01:34:4176 LOG_IF(WARNING, !ret) <<
77 "Call to Java_AndroidNetworkLibrary_storeKeyPair failed";
78 return ret;
[email protected]6dbdaa82011-08-11 16:05:5679}
80
mgershd21d6d142016-12-14 23:06:3681bool IsCleartextPermitted(const std::string& host) {
82 JNIEnv* env = AttachCurrentThread();
83 ScopedJavaLocalRef<jstring> host_string = ConvertUTF8ToJavaString(env, host);
84 return Java_AndroidNetworkLibrary_isCleartextPermitted(env, host_string);
85}
86
[email protected]c470e1b2012-06-15 07:46:3987bool HaveOnlyLoopbackAddresses() {
88 JNIEnv* env = AttachCurrentThread();
89 return Java_AndroidNetworkLibrary_haveOnlyLoopbackAddresses(env);
90}
91
[email protected]6dbdaa82011-08-11 16:05:5692bool GetMimeTypeFromExtension(const std::string& extension,
93 std::string* result) {
94 JNIEnv* env = AttachCurrentThread();
95
[email protected]b47feba2012-04-24 01:34:4196 ScopedJavaLocalRef<jstring> extension_string =
97 ConvertUTF8ToJavaString(env, extension);
98 ScopedJavaLocalRef<jstring> ret =
torne948f3662016-08-16 15:10:4499 Java_AndroidNetworkLibrary_getMimeTypeFromExtension(env,
100 extension_string);
[email protected]6dbdaa82011-08-11 16:05:56101
[email protected]2bde22882012-11-06 12:27:08102 if (!ret.obj())
[email protected]6dbdaa82011-08-11 16:05:56103 return false;
[email protected]b47feba2012-04-24 01:34:41104 *result = ConvertJavaStringToUTF8(ret);
[email protected]6dbdaa82011-08-11 16:05:56105 return true;
106}
107
[email protected]74d9c5242014-05-01 05:10:03108std::string GetTelephonyNetworkCountryIso() {
109 return base::android::ConvertJavaStringToUTF8(
110 Java_AndroidNetworkLibrary_getNetworkCountryIso(
wnwen8fc102852017-04-24 13:38:04111 base::android::AttachCurrentThread()));
[email protected]74d9c5242014-05-01 05:10:03112}
113
114std::string GetTelephonyNetworkOperator() {
115 return base::android::ConvertJavaStringToUTF8(
116 Java_AndroidNetworkLibrary_getNetworkOperator(
wnwen8fc102852017-04-24 13:38:04117 base::android::AttachCurrentThread()));
[email protected]74d9c5242014-05-01 05:10:03118}
119
tbansala2e9f20c2015-09-03 20:05:08120std::string GetTelephonySimOperator() {
121 return base::android::ConvertJavaStringToUTF8(
122 Java_AndroidNetworkLibrary_getSimOperator(
wnwen8fc102852017-04-24 13:38:04123 base::android::AttachCurrentThread()));
tbansala2e9f20c2015-09-03 20:05:08124}
125
126bool GetIsRoaming() {
127 return Java_AndroidNetworkLibrary_getIsRoaming(
wnwen8fc102852017-04-24 13:38:04128 base::android::AttachCurrentThread());
tbansala2e9f20c2015-09-03 20:05:08129}
130
tbansala7581d82016-11-24 18:00:33131bool GetIsCaptivePortal() {
132 return Java_AndroidNetworkLibrary_getIsCaptivePortal(
wnwen8fc102852017-04-24 13:38:04133 base::android::AttachCurrentThread());
tbansala7581d82016-11-24 18:00:33134}
135
tbansalc5a1c912016-07-01 22:11:56136std::string GetWifiSSID() {
137 return base::android::ConvertJavaStringToUTF8(
138 Java_AndroidNetworkLibrary_getWifiSSID(
wnwen8fc102852017-04-24 13:38:04139 base::android::AttachCurrentThread()));
tbansalc5a1c912016-07-01 22:11:56140}
141
pauljensenf3ef7a582017-01-10 16:14:50142void GetDnsServers(std::vector<IPEndPoint>* dns_servers) {
143 JNIEnv* env = AttachCurrentThread();
144 std::vector<std::string> dns_servers_strings;
145 base::android::JavaArrayOfByteArrayToStringVector(
wnwen8fc102852017-04-24 13:38:04146 env, Java_AndroidNetworkLibrary_getDnsServers(env).obj(),
pauljensenf3ef7a582017-01-10 16:14:50147 &dns_servers_strings);
148 for (const std::string& dns_address_string : dns_servers_strings) {
149 IPAddress dns_address(
150 reinterpret_cast<const uint8_t*>(dns_address_string.c_str()),
151 dns_address_string.size());
152 IPEndPoint dns_server(dns_address, dns_protocol::kDefaultPort);
153 dns_servers->push_back(dns_server);
154 }
155}
156
[email protected]6dbdaa82011-08-11 16:05:56157} // namespace android
158} // namespace net