19ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk/** 29ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * Copyright (c) 2013, The Android Open Source Project 39ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * 49ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 59ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * you may not use this file except in compliance with the License. 69ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * You may obtain a copy of the License at 79ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * 89ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 99ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * 109ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * Unless required by applicable law or agreed to in writing, software 119ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * distributed under the License is distributed on an "AS IS" BASIS, 129ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * See the License for the specific language governing permissions and 149ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * limitations under the License. 159ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk */ 169ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monkpackage com.android.pacprocessor; 179ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 189ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monkimport android.util.Log; 199ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 209ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk/** 219ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk * @hide 229ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk */ 239ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monkpublic class PacNative { 249ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk private static final String TAG = "PacProxy"; 259ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 269ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk private String mCurrentPac; 279ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 289ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk private boolean mIsActive; 299ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 309ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk // Only make native calls from inside synchronized blocks. 319ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk private native boolean createV8ParserNativeLocked(); 329ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk private native boolean destroyV8ParserNativeLocked(); 339ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 349ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk private native boolean setProxyScriptNativeLocked(String script); 359ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 369ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk private native String makeProxyRequestNativeLocked(String url, String host); 379ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 389ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk static { 399ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk System.loadLibrary("jni_pacprocessor"); 409ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 419ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 429ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk PacNative() { 439ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 449ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 459ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 469ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk public synchronized boolean startPacSupport() { 479ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk if (createV8ParserNativeLocked()) { 489ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk Log.e(TAG, "Unable to Create v8 Proxy Parser."); 499ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return true; 509ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 519ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk mIsActive = true; 529ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return false; 539ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 549ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 559ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk public synchronized boolean stopPacSupport() { 569ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk if (mIsActive) { 579ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk if (destroyV8ParserNativeLocked()) { 589ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk Log.e(TAG, "Unable to Destroy v8 Proxy Parser."); 599ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return true; 609ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 619ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk mIsActive = false; 629ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 639ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return false; 649ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 659ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 669ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk public synchronized boolean setCurrentProxyScript(String script) { 679ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk if (setProxyScriptNativeLocked(script)) { 689ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk Log.e(TAG, "Unable to parse proxy script."); 699ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return true; 709ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 719ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return false; 729ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 739ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 749ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk public synchronized String makeProxyRequest(String url, String host) { 759ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk String ret = makeProxyRequestNativeLocked(url, host); 769ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk if ((ret == null) || (ret.length() == 0)) { 779ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk Log.e(TAG, "v8 Proxy request failed."); 789ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk ret = null; 799ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 809ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return ret; 819ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 829ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk 839ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk public synchronized boolean isActive() { 849ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk return mIsActive; 859ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk } 869ced3cd9d6ea414523051ec872fffc68f5fdbf08Jason Monk} 87