network_library.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// 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
7#include "base/android/jni_android.h"
8#include "base/android/jni_array.h"
9#include "base/android/jni_string.h"
10#include "base/android/scoped_java_ref.h"
11#include "base/logging.h"
12#include "jni/AndroidNetworkLibrary_jni.h"
13
14using base::android::AttachCurrentThread;
15using base::android::ClearException;
16using base::android::ConvertJavaStringToUTF8;
17using base::android::ConvertUTF8ToJavaString;
18using base::android::GetApplicationContext;
19using base::android::ScopedJavaLocalRef;
20using base::android::ToJavaArrayOfByteArray;
21using base::android::ToJavaByteArray;
22
23namespace net {
24namespace android {
25
26VerifyResult VerifyX509CertChain(const std::vector<std::string>& cert_chain,
27                                 const std::string& auth_type) {
28  JNIEnv* env = AttachCurrentThread();
29
30  ScopedJavaLocalRef<jobjectArray> chain_byte_array =
31      ToJavaArrayOfByteArray(env, cert_chain);
32  DCHECK(!chain_byte_array.is_null());
33
34  ScopedJavaLocalRef<jstring> auth_string =
35      ConvertUTF8ToJavaString(env, auth_type);
36  DCHECK(!auth_string.is_null());
37
38  jboolean trusted = Java_AndroidNetworkLibrary_verifyServerCertificates(
39      env, chain_byte_array.obj(), auth_string.obj());
40  if (ClearException(env))
41    return VERIFY_INVOCATION_ERROR;
42
43  return trusted ? VERIFY_OK : VERIFY_NO_TRUSTED_ROOT;
44}
45
46bool StoreKeyPair(const uint8* public_key,
47                  size_t public_len,
48                  const uint8* private_key,
49                  size_t private_len) {
50  JNIEnv* env = AttachCurrentThread();
51  ScopedJavaLocalRef<jbyteArray> public_array =
52      ToJavaByteArray(env, public_key, public_len);
53  ScopedJavaLocalRef<jbyteArray> private_array =
54      ToJavaByteArray(env, private_key, private_len);
55  jboolean ret = Java_AndroidNetworkLibrary_storeKeyPair(env,
56      GetApplicationContext(), public_array.obj(), private_array.obj());
57  LOG_IF(WARNING, !ret) <<
58      "Call to Java_AndroidNetworkLibrary_storeKeyPair failed";
59  return ret;
60}
61
62bool HaveOnlyLoopbackAddresses() {
63  JNIEnv* env = AttachCurrentThread();
64  return Java_AndroidNetworkLibrary_haveOnlyLoopbackAddresses(env);
65}
66
67std::string GetNetworkList() {
68  JNIEnv* env = AttachCurrentThread();
69  ScopedJavaLocalRef<jstring> ret =
70      Java_AndroidNetworkLibrary_getNetworkList(env);
71  return ConvertJavaStringToUTF8(ret);
72}
73
74bool GetMimeTypeFromExtension(const std::string& extension,
75                              std::string* result) {
76  JNIEnv* env = AttachCurrentThread();
77
78  ScopedJavaLocalRef<jstring> extension_string =
79      ConvertUTF8ToJavaString(env, extension);
80  ScopedJavaLocalRef<jstring> ret =
81      Java_AndroidNetworkLibrary_getMimeTypeFromExtension(
82          env, extension_string.obj());
83
84  if (!ret.obj())
85    return false;
86  *result = ConvertJavaStringToUTF8(ret);
87  return true;
88}
89
90bool RegisterNetworkLibrary(JNIEnv* env) {
91  return RegisterNativesImpl(env);
92}
93
94}  // namespace android
95}  // namespace net
96