| Index: jni/AndroidWebRequest.cpp | 
| diff --git a/jni/AndroidWebRequest.cpp b/jni/AndroidWebRequest.cpp | 
| deleted file mode 100644 | 
| index fb80bca0295d39d75b49efce64e20e5277274e6a..0000000000000000000000000000000000000000 | 
| --- a/jni/AndroidWebRequest.cpp | 
| +++ /dev/null | 
| @@ -1,323 +0,0 @@ | 
| -/* | 
| - * This file is part of Adblock Plus <http://adblockplus.org/>, | 
| - * Copyright (C) 2006-2014 Eyeo GmbH | 
| - * | 
| - * Adblock Plus is free software: you can redistribute it and/or modify | 
| - * it under the terms of the GNU General Public License version 3 as | 
| - * published by the Free Software Foundation. | 
| - * | 
| - * Adblock Plus is distributed in the hope that it will be useful, | 
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| - * GNU General Public License for more details. | 
| - * | 
| - * You should have received a copy of the GNU General Public License | 
| - * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
| - */ | 
| - | 
| -#include <AdblockPlus.h> | 
| -#include "AndroidWebRequest.h" | 
| -#include "Utils.h" | 
| -#include "Debug.h" | 
| - | 
| -namespace | 
| -{ | 
| -  std::string ExtractExceptionMessage(JNIEnv* env, jthrowable throwable) | 
| -  { | 
| -    jclass throwableClass = env->FindClass("java/lang/Throwable"); | 
| -    jmethodID throwableToStringMethodId = env->GetMethodID(throwableClass, "toString", "()Ljava/lang/String;"); | 
| -    jstring javaMessage = static_cast<jstring>(env->CallObjectMethod(throwable, throwableToStringMethodId)); | 
| -    return "Java exception: " + GetString(env, javaMessage); | 
| -  } | 
| - | 
| -  class JavaException : public std::exception | 
| -  { | 
| -  public: | 
| -    JavaException(JNIEnv* env) | 
| -      : env(env), throwable(env->ExceptionOccurred()) | 
| -    { | 
| -      env->ExceptionClear(); | 
| -      message = ExtractExceptionMessage(env, throwable); | 
| -    } | 
| - | 
| -    virtual ~JavaException() throw() | 
| -    { | 
| -    } | 
| - | 
| -    const char* what() const throw() | 
| -    { | 
| -      return message.c_str(); | 
| -    } | 
| - | 
| -    bool IsInstanceOf(const std::string& className) const | 
| -    { | 
| -      jclass clazz = env->FindClass(className.c_str()); | 
| -      if (!clazz) | 
| -        return false; | 
| -      bool isInstance = env->IsInstanceOf(throwable, clazz); | 
| -      env->DeleteLocalRef(clazz); | 
| -      return isInstance; | 
| -    } | 
| - | 
| -  private: | 
| -    JNIEnv* env; | 
| -    jthrowable throwable; | 
| -    std::string message; | 
| -  }; | 
| - | 
| -  int64_t ExceptionToStatus(const JavaException& exception) | 
| -  { | 
| -    if (exception.IsInstanceOf("java/net/MalformedURLException")) | 
| -      return AdblockPlus::WebRequest::NS_ERROR_MALFORMED_URI; | 
| -    if (exception.IsInstanceOf("java/net/SocketTimeoutException")) | 
| -      return AdblockPlus::WebRequest::NS_ERROR_NET_TIMEOUT; | 
| -    return AdblockPlus::WebRequest::NS_ERROR_FAILURE; | 
| -  } | 
| -} | 
| - | 
| -AndroidWebRequest::AndroidWebRequest(JavaVM*& gJvm) : globalJvm(gJvm) | 
| -{ | 
| -  JNIEnv* jniEnv = NULL; | 
| -  int stat = globalJvm->GetEnv((void **)&jniEnv, JNI_VERSION_1_6); | 
| -  if (stat == JNI_EDETACHED) | 
| -  { | 
| -    if (globalJvm->AttachCurrentThread(&jniEnv, NULL) != 0) | 
| -      throw std::runtime_error("Failed to get JNI environment"); | 
| -  } | 
| - | 
| -  jUrlClass = reinterpret_cast<jclass>(jniEnv->NewGlobalRef(jniEnv->FindClass("java/net/URL"))); | 
| -  jUrlConstructorID = jniEnv->GetMethodID(jUrlClass, "<init>", "(Ljava/lang/String;)V"); | 
| -  jUrlOpenConnectionID = jniEnv->GetMethodID(jUrlClass, "openConnection", "()Ljava/net/URLConnection;"); | 
| -  jConnectionClass = reinterpret_cast<jclass>(jniEnv->NewGlobalRef(jniEnv->FindClass("java/net/HttpURLConnection"))); | 
| -  jConnectionSetMethodID = jniEnv->GetMethodID(jConnectionClass, "setRequestMethod", "(Ljava/lang/String;)V"); | 
| -  jConnectionSetRequestPropertyID = jniEnv->GetMethodID(jConnectionClass, "setRequestProperty", "(Ljava/lang/String;Ljava/lang/String;)V"); | 
| -  jConnectionConnectID = jniEnv->GetMethodID(jConnectionClass, "connect", "()V"); | 
| -  jConnectionGetContentLengthID = jniEnv->GetMethodID(jConnectionClass, "getContentLength", "()I"); | 
| -  jConnectionGetResponseCodeID = jniEnv->GetMethodID(jConnectionClass, "getResponseCode", "()I"); | 
| -  jConnectionGetContentEncodingID = jniEnv->GetMethodID(jConnectionClass, "getContentEncoding", "()Ljava/lang/String;"); | 
| -  jConnectionGetInputStreamID = jniEnv->GetMethodID(jConnectionClass, "getInputStream", "()Ljava/io/InputStream;"); | 
| -  jInputStreamReaderClass = reinterpret_cast<jclass>(jniEnv->NewGlobalRef(jniEnv->FindClass("java/io/InputStreamReader"))); | 
| -  jInputStreamReaderConstructorID = jniEnv->GetMethodID(jInputStreamReaderClass, "<init>", "(Ljava/io/InputStream;Ljava/lang/String;)V"); | 
| -  jBufferedReaderClass = reinterpret_cast<jclass>(jniEnv->NewGlobalRef(jniEnv->FindClass("java/io/BufferedReader"))); | 
| -  jBufferedReaderConstructorID = jniEnv->GetMethodID(jBufferedReaderClass, "<init>", "(Ljava/io/Reader;)V"); | 
| -  jStringBuilderClass = reinterpret_cast<jclass>(jniEnv->NewGlobalRef(jniEnv->FindClass("java/lang/StringBuilder"))); | 
| -  jStringBuilderConstructorID = jniEnv->GetMethodID(jStringBuilderClass, "<init>", "()V"); | 
| -  jBufferedReaderReadID = jniEnv->GetMethodID(jBufferedReaderClass, "read", "([CII)I"); | 
| -  jStringBuilderAppendID = jniEnv->GetMethodID(jStringBuilderClass, "append", "([CII)Ljava/lang/StringBuilder;"); | 
| -  jStringBuilderToStringID = jniEnv->GetMethodID(jStringBuilderClass, "toString", "()Ljava/lang/String;"); | 
| -  jBufferedReaderCloseID = jniEnv->GetMethodID(jBufferedReaderClass, "close", "()V"); | 
| -  jConnectionGetHeaderFieldKeyID = jniEnv->GetMethodID(jConnectionClass, "getHeaderField", "(I)Ljava/lang/String;"); | 
| -  jConnectionGetHeaderFieldID = jniEnv->GetMethodID(jConnectionClass, "getHeaderFieldKey", "(I)Ljava/lang/String;"); | 
| - | 
| -  if (stat == JNI_EDETACHED) | 
| -    globalJvm->DetachCurrentThread(); | 
| -} | 
| - | 
| -AndroidWebRequest::~AndroidWebRequest() | 
| -{ | 
| -  JNIEnv* jniEnv = NULL; | 
| -  int stat = globalJvm->GetEnv((void **)&jniEnv, JNI_VERSION_1_6); | 
| -  if (stat == JNI_EDETACHED) | 
| -  { | 
| -    if (globalJvm->AttachCurrentThread(&jniEnv, NULL) != 0) | 
| -      throw std::runtime_error("Failed to get JNI environment"); | 
| -  } | 
| - | 
| -  jniEnv->DeleteGlobalRef(jUrlClass); | 
| -  jniEnv->DeleteGlobalRef(jConnectionClass); | 
| -  jniEnv->DeleteGlobalRef(jInputStreamReaderClass); | 
| -  jniEnv->DeleteGlobalRef(jBufferedReaderClass); | 
| -  jniEnv->DeleteGlobalRef(jStringBuilderClass); | 
| - | 
| -  if (stat == JNI_EDETACHED) | 
| -    globalJvm->DetachCurrentThread(); | 
| -} | 
| - | 
| -AdblockPlus::ServerResponse AndroidWebRequest::GET( | 
| -  const std::string& url, const AdblockPlus::HeaderList& requestHeaders) const | 
| -{ | 
| -  JNIEnv* jniEnv = NULL; | 
| -  int stat = globalJvm->GetEnv((void **)&jniEnv, JNI_VERSION_1_6); | 
| -  if (stat == JNI_EDETACHED) | 
| -  { | 
| -    if (globalJvm->AttachCurrentThread(&jniEnv, NULL) != 0) | 
| -      throw std::runtime_error("Failed to get JNI environment"); | 
| -  } | 
| - | 
| -  AdblockPlus::ServerResponse result; | 
| -  try | 
| -  { | 
| -    // URL jUrl = new URL(url) | 
| -    jstring jUrlStr = jniEnv->NewStringUTF(url.c_str()); | 
| - | 
| -    jobject jUrl = jniEnv->NewObject(jUrlClass, jUrlConstructorID, jUrlStr); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| -    jniEnv->DeleteLocalRef(jUrlStr); | 
| - | 
| -    // HttpURLConnection connection = (HttpURLConnection) jUrl.openConnection(); | 
| -    jobject jConnection = jniEnv->CallObjectMethod(jUrl, jUrlOpenConnectionID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    // connection.setRequestMethod("GET"); | 
| -    jstring jMethod = jniEnv->NewStringUTF("GET"); | 
| -    jniEnv->CallVoidMethod(jConnection, jConnectionSetMethodID, jMethod); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| -    jniEnv->DeleteLocalRef(jMethod); | 
| - | 
| -    for (int i = 0; i < requestHeaders.size(); i++) | 
| -    { | 
| -      // connection.setRequestProperty(requestHeaders[i].first, requestHeaders[i].second); | 
| -      jstring jHeader = jniEnv->NewStringUTF(requestHeaders[i].first.c_str()); | 
| -      jstring jValue = jniEnv->NewStringUTF(requestHeaders[i].second.c_str()); | 
| -      jniEnv->CallVoidMethod(jConnection, jConnectionSetRequestPropertyID, jHeader, jValue); | 
| -      if (jniEnv->ExceptionCheck()) | 
| -        throw JavaException(jniEnv); | 
| -      jniEnv->DeleteLocalRef(jHeader); | 
| -      jniEnv->DeleteLocalRef(jValue); | 
| -    } | 
| - | 
| -    // connection.connect(); | 
| -    jniEnv->CallVoidMethod(jConnection, jConnectionConnectID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    // int lenghtOfFile = connection.getContentLength(); | 
| -    jint lenghtOfFile = jniEnv->CallIntMethod(jConnection, jConnectionGetContentLengthID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    D(D_WARN, "Size: %d", lenghtOfFile); | 
| - | 
| -    // result.responseStatus = connection.getResponseCode(); | 
| -    result.responseStatus = jniEnv->CallIntMethod(jConnection, jConnectionGetResponseCodeID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    /* Read response data */ | 
| - | 
| -    // String jEncoding = connection.getContentEncoding(); | 
| -    jstring jEncoding = (jstring) jniEnv->CallObjectMethod(jConnection, jConnectionGetContentEncodingID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    if (jEncoding == NULL) | 
| -      jEncoding = jniEnv->NewStringUTF("utf-8"); | 
| - | 
| -    // InputStream jis = connection.getInputStream(); | 
| -    jobject jis = jniEnv->CallObjectMethod(jConnection, jConnectionGetInputStreamID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    // InputStreamReader jisr = new InputStreamReader(jis, jEncoding); | 
| -    jobject jisr = jniEnv->NewObject(jInputStreamReaderClass, jInputStreamReaderConstructorID, jis, jEncoding); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    jniEnv->DeleteLocalRef(jEncoding); | 
| - | 
| -    // BufferedReader jin = new BufferedReader(jisr); | 
| -    jobject jin = jniEnv->NewObject(jBufferedReaderClass, jBufferedReaderConstructorID, jisr); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    // char[] jBuffer = new char[0x10000]; | 
| -    jcharArray jBuffer = jniEnv->NewCharArray(0x10000); | 
| - | 
| -    // StringBuilder jout = new StringBuilder(); | 
| -    jobject jout = jniEnv->NewObject(jStringBuilderClass, jStringBuilderConstructorID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    jlong total = 0; | 
| -    jint read; | 
| - | 
| -    jint jBufferLength = (jint) jniEnv->GetArrayLength(jBuffer); | 
| - | 
| -    do | 
| -    { | 
| -      // read = jin.read(buffer, 0, buffer.length); | 
| -      read = jniEnv->CallIntMethod(jin, jBufferedReaderReadID, jBuffer, 0, jBufferLength); | 
| -      if (jniEnv->ExceptionCheck()) | 
| -        throw JavaException(jniEnv); | 
| - | 
| -      if (read > 0) | 
| -      { | 
| -        // jout.append(buffer, 0, read); | 
| -        jniEnv->CallObjectMethod(jout, jStringBuilderAppendID, jBuffer, 0, jBufferLength); | 
| -        if (jniEnv->ExceptionCheck()) | 
| -          throw JavaException(jniEnv); | 
| - | 
| -        total += read; | 
| -      } | 
| -    } | 
| -    while (read >= 0); | 
| - | 
| -    // String jData = out.toString(); | 
| -    jstring jData = (jstring) jniEnv->CallObjectMethod(jout, jStringBuilderToStringID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    result.responseText = GetString(jniEnv, jData); | 
| - | 
| -    // jin.close(); | 
| -    jniEnv->CallVoidMethod(jin, jBufferedReaderCloseID); | 
| -    if (jniEnv->ExceptionCheck()) | 
| -      throw JavaException(jniEnv); | 
| - | 
| -    jint i = 0; | 
| -    while (true) | 
| -    { | 
| -      // String jHeaderName = connection.getHeaderFieldKey(i) | 
| -      jstring jHeaderName = (jstring) jniEnv->CallObjectMethod(jConnection, jConnectionGetHeaderFieldKeyID, i); | 
| -      if (jniEnv->ExceptionCheck()) | 
| -        throw JavaException(jniEnv); | 
| - | 
| -      // String jHeaderValue = connection.getHeaderField(i) | 
| -      jstring jHeaderValue = (jstring) jniEnv->CallObjectMethod(jConnection, jConnectionGetHeaderFieldID, i); | 
| -      if (jniEnv->ExceptionCheck()) | 
| -        throw JavaException(jniEnv); | 
| - | 
| -      if (!jHeaderValue) | 
| -        break; | 
| - | 
| -      std::string headerName = GetString(jniEnv, jHeaderName); | 
| -      std::string headerValue = GetString(jniEnv, jHeaderValue); | 
| - | 
| -      headerName = TrimString(headerName); | 
| -      headerValue = TrimString(headerValue); | 
| - | 
| -      std::transform(headerName.begin(), headerName.end(), headerName.begin(), ::tolower); | 
| - | 
| -      result.responseHeaders.push_back(std::pair<std::string, std::string>(headerName, headerValue)); | 
| - | 
| -      i++; | 
| -    } | 
| -    D(D_WARN, "Finished downloading"); | 
| - | 
| -    result.status = NS_OK; | 
| -  } | 
| -  catch(JavaException& e) | 
| -  { | 
| -    result.responseStatus = 0; | 
| -    result.status = ExceptionToStatus(e); | 
| -    D(D_ERROR, "%s", e.what()); | 
| -  } | 
| -  catch (const std::exception& e) | 
| -  { | 
| -    D(D_ERROR, "Exception: %s", e.what()); | 
| -    result.status = AdblockPlus::DefaultWebRequest::NS_ERROR_FAILURE; | 
| -  } | 
| -  catch (...) | 
| -  { | 
| -    D(D_ERROR, "Unknown exception"); | 
| -    result.status = AdblockPlus::DefaultWebRequest::NS_ERROR_FAILURE; | 
| -  } | 
| - | 
| -  if (stat == JNI_EDETACHED) | 
| -    globalJvm->DetachCurrentThread(); | 
| - | 
| -  return result; | 
| -} | 
|  |