Example #1
0
File: runvpn.c Project: kse/runvpn
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;
}
JNIEXPORT void JNICALL Java_com_choury_sproxy_SproxyVpnService_reload(JNIEnv *, jobject){
    LOG("native SproxyVpnService.reload.\n");
    return vpn_reload();
}