Exemple #1
0
SE_HANDLE
vpn_new_nic (SE_HANDLE ph, SE_HANDLE vh, struct nicfunc *func)
{
	struct nicdata *p;

#ifdef VPN_PASS_MODE
	pass_init (ph, vh, func);
	return "PASS MODE";
#endif /* VPN_PASS_MODE */
	p = alloc (sizeof *p);
	p->ph = ph;
	p->vh = vh;
	memcpy (&p->func, func, sizeof *func);
	return vpn_start (p);
}
/*
 * 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;
}
Exemple #3
0
int
main(int argc, char *argv[])
{
	const char *root_folder = getenv("RUNVPN_ROOT");
	struct vpn *vpn = NULL;
	struct vpn *prev = NULL;

	if (root_folder == NULL) {
		printf("Environment variable \"RUNVPN_ROOT\" is not defined.\n");
		return EXIT_FAILURE;
	}

	if (argc == 1) {
		/* fprintf(stdout, "%30s%s%s\n", BLUE_GRAY, "Listing VPNS", RESET); */
		puts("                    " BLUE_GRAY "Listing VPNS" RESET);

		vpn = get_vpns(root_folder);
		while(vpn != NULL)
		{
			//for (vpn = get_vpns(root_folder); vpn; vpn = vpn->next) {
			fprintf(stdout, "%25s - ", vpn->name);

			switch (vpn_status(vpn)) {
			case VPN_ERROR:
				return EXIT_FAILURE;

			case VPN_DEAD:
				print_color("Down", YELLOW);
				break;

			case VPN_RUNNING:
				print_color("Up", GREEN);
				break;

			case VPN_PERM_DENIED:
				print_color("Permission denied", RED);
				break;

			case VPN_STALE_PID:
				print_color("Down", YELLOW);
				vpn_delete_logfile(vpn);
				vpn_delete_pidfile(vpn);
				break;

			default:
				print_color("Unknown", RED);
				break;
			}
			
			prev = vpn;
			vpn = prev->next;

			vpn_free(prev);
			free(prev);
		}

	} else if (argc == 2) {
		struct vpn vpn;

		if (vpn_init(&vpn, root_folder, argv[argc - 1])) {
			fprintf(stderr, "Problem finding vpn: %s\n", strerror(errno));
			return EXIT_FAILURE;
		}

		if (vpn_status(&vpn) == VPN_ERROR ||
				vpn_start(&vpn, NO_DAEMON))
			return EXIT_FAILURE;

		vpn_start(&vpn, NO_DAEMON);
        vpn_free(&vpn);

	} else if (argc == 3) {
		struct vpn vpn;
		char *name = *++argv;
		char *argument = *++argv;

		if (vpn_init(&vpn, root_folder, name) == -1) {
			fprintf(stderr, "Problem finding vpn: %s\n", strerror(errno));
			return EXIT_FAILURE;
		}

		if (vpn_status(&vpn) == VPN_ERROR)
			return EXIT_FAILURE;

		/* Do different things depending on 2nd argument pased. */
		if (strcmp(argument, "stop") == 0) {
			if (vpn_stop(&vpn))
				return EXIT_FAILURE;
		} else if (strcmp(argument, "reload") == 0) {
			if (vpn_reload(&vpn))
				return EXIT_FAILURE;
		} else if (strcmp(argument, "daemon") == 0) {
			if (vpn_start(&vpn, DAEMON))
				return EXIT_FAILURE;
		} else if (strcmp(argument, "drestart") == 0) {
			if (vpn_stop(&vpn) || vpn_start(&vpn, DAEMON))
				return EXIT_FAILURE;
		} else if (strcmp(argument, "restart") == 0) {
			if (vpn_stop(&vpn) || vpn_start(&vpn, NO_DAEMON))
				return EXIT_FAILURE;
		} else if (strcmp(argument, "log") == 0) {
			vpn_dumplog(&vpn);
		} else {
			fprintf(stderr, "Unknown action '%s'\n", argument);
		}

        vpn_free(&vpn);
	}

	return EXIT_SUCCESS;
}