/*
 * 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;
}
Example #2
0
        copystring(buf, proxy, size);
    }

    static void setspeedlimit(int limit)
    {
        SDL_Mutex_Locker m(varlock);
        speedlimit = limit*1024;
    }

    static void getspeedlimit(int& limit)
    {
        SDL_Mutex_Locker m(varlock);
        limit = speedlimit;
    }

    MODSVARFP(httpproxy, "", setproxy(httpproxy));
    MODVARFP(httpspeedlimit, 0, 0, 0x1FFFFF, setspeedlimit(httpspeedlimit));

    struct http_t
    {
        SDL_mutex *requestmutex;
        bool processed;
        bool wantuninstall;
        vector<char> data;
        SDL_Thread *thread;
        CURL *curl;
        CURLcode requestresult;
        long responsecode;
        bool requestok;
        uint requestid;
        int speedlimit;