/* * Class: com_choury_sproxy_SproxyVpnService * Method: start * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_choury_sproxy_SproxyVpnService_start (JNIEnv *jnienv, jobject obj, jint sockfd, jstring server, jstring secret) { jnienv->GetJavaVM(&jnijvm); jniobj = jnienv->NewGlobalRef(obj); std::string config_file = getExternalFilesDir() + "/sproxy.conf"; if(access(config_file.c_str(), R_OK) == 0){ LOG("read config from %s.\n", config_file.c_str()); parseConfigFile(config_file.c_str()); } LOG("native SproxyVpnService.start %d.\n", sockfd); const char *server_str = jnienv->GetStringUTFChars(server, nullptr); const char *secret_str = jnienv->GetStringUTFChars(secret, nullptr); opt.ignore_cert_error = 1; setproxy(server_str); Base64Encode(secret_str, strlen(secret_str), opt.rewrite_auth); jnienv->ReleaseStringUTFChars(server, server_str); jnienv->ReleaseStringUTFChars(secret, secret_str); jnienv->DeleteLocalRef(server); jnienv->DeleteLocalRef(secret); jclass cls = jnienv->GetObjectClass(jniobj); jmethodID mid = jnienv->GetMethodID(cls, "getMyVersion", "()Ljava/lang/String;"); jstring jversion = (jstring) jnienv->CallObjectMethod(jniobj, mid); const char *jversion_str = jnienv->GetStringUTFChars(jversion, nullptr); strcpy(version, jversion_str); jnienv->ReleaseStringUTFChars(jversion, jversion_str); jnienv->DeleteLocalRef(jversion); jnienv->DeleteLocalRef(cls); vpn_start(sockfd); extenalCacheDir.clear(); extenalFilesDir.clear(); jnienv->DeleteGlobalRef(jniobj); jniobj = nullptr; }
QStringList QStandardPaths::standardLocations(StandardLocation type) { if (type == MusicLocation) { return QStringList() << writableLocation(type) << getExternalFilesDir("DIRECTORY_MUSIC") << getExternalStoragePublicDirectory("DIRECTORY_PODCASTS") << getExternalFilesDir("DIRECTORY_PODCASTS") << getExternalStoragePublicDirectory("DIRECTORY_NOTIFICATIONS") << getExternalFilesDir("DIRECTORY_NOTIFICATIONS") << getExternalStoragePublicDirectory("DIRECTORY_ALARMS") << getExternalFilesDir("DIRECTORY_ALARMS"); } if (type == MoviesLocation) { return QStringList() << writableLocation(type) << getExternalFilesDir("DIRECTORY_MOVIES"); } if (type == PicturesLocation) { return QStringList() << writableLocation(type) << getExternalFilesDir("DIRECTORY_PICTURES"); } if (type == DocumentsLocation) { if (QtAndroidPrivate::androidSdkVersion() > 18) { return QStringList() << writableLocation(type) << getExternalFilesDir("DIRECTORY_DOCUMENTS"); } else { return QStringList() << writableLocation(type) << getExternalFilesDir() + QLatin1String("/Documents"); } } if (type == DownloadLocation) { return QStringList() << writableLocation(type) << getExternalFilesDir("DIRECTORY_DOWNLOADS"); } if (type == AppDataLocation || type == AppLocalDataLocation) { return QStringList() << writableLocation(type) << getExternalFilesDir(); } if (type == CacheLocation) { return QStringList() << writableLocation(type) << getExternalCacheDir(); } if (type == FontsLocation) { QString &fontLocation = (*androidDirCache)[QStringLiteral("FONT_LOCATION")]; if (!fontLocation.isEmpty()) return QStringList(fontLocation); const QByteArray ba = qgetenv("QT_ANDROID_FONT_LOCATION"); if (!ba.isEmpty()) return QStringList((fontLocation = QDir::cleanPath(QString::fromLocal8Bit(ba)))); return QStringList((fontLocation = QLatin1String("/system/fonts"))); } return QStringList(writableLocation(type)); }