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